首页 > 解决方案 > CallByName 不适用于所有对象/函数

问题描述

在 VBA 中,大多数 Excel 函数可以通过Application.WorksheetFunctionVBA

举个sinh例子sin

工作表功能

Debug.Print Application.WorksheetFunction.sinh(5)
 74,2032105777888

VBA 函数

Debug.Print VBA.sin(5)
-0,958924274663138

问题:

为什么不适CallByName用于 Worksheet 函数和 VBA 函数?

工作表功能

Debug.Print CallByName(Application.WorksheetFunction, "sinh", VbGet, 5)
 74,2032105777888

VBA 函数

Debug.Print CallByName(VBA, "sin", VbGet, 5)

在此处输入图像描述

标签: excelvba

解决方案


在 VBA 中,大多数 Excel 函数都可以通过 Application.WorksheetFunction 或 VBA 访问

不可以。Excel 函数可以作为针对全局Excel.Application对象的后期绑定成员调用来访问(如果您托管在 Excel 中),然后一些函数在接口中具有早期绑定“等效”(错误处理策略需要不同)Excel.WorksheetObject(你Application.WorksheetFunction确实从那里得到它)。

库的成员VBA,无论是否为全局范围,都与 Excel 无关:每个 VBA 项目都引用 VBA 标准库,无论其宿主应用程序(Word、Excel、Access、...SolidWorks、Sage300 等.)。如果一个函数看起来在 VBA 和 Excel 库中都存在,那么 VBA 函数可能/理论上应该是首选。

使用对象浏览器 (F2) 来发现 VBA 标准库的成员,包括并且可能尤其是它的Math模块。


推荐阅读