在VBA中,大多数Excel函数都可以通过Application.WorksheetFunction或VBA访问。
以sinh和sin为例:
工作表函数
Debug.Print Application.WorksheetFunction.sinh(5)
74,2032105777888VBA函数
Debug.Print VBA.sin(5)
-0,958924274663138问题:
为什么CallByName不能同时处理工作表函数和VBA函数?
工作表函数
Debug.Print CallByName(Application.WorksheetFunction, "sinh", VbGet, 5)
74,2032105777888VBA函数
Debug.Print CallByName(VBA, "sin", VbGet, 5)

发布于 2020-04-07 20:00:36
CallByName的电话签名..。它实际上是VBA.Interaction的一个成员,如下所示(所以您的代码片段相当于VBA.Interaction.CallByName(VBA, "sin", VbGet, 5)或只是VBA.CallByName...,在任何情况下都是一个边点):

是
CallByName(Object As Object, ProcName As String, CallType As VbCallType, Args() As Variant)
由于VBA不是Object,而是标准的VBA库,这会引发类型不匹配错误。
发布于 2020-04-08 01:03:44
在VBA中,大多数
函数都可以通过Application.WorksheetFunction或VBA访问。
不是的。作为对全局Excel.Application对象的后期绑定成员调用(如果您托管在Excel中),可以访问Excel函数,而且有些函数在Excel.WorksheetObject接口中有一个早期绑定的“等效”(错误处理策略需要不同)(确实是从Application.WorksheetFunction获得的)。
VBA库的成员,无论是全局的还是非的,都与Excel无关:每个VBA项目都引用VBA标准库,而不管其主机应用程序(Word、Excel、Access、...SolidWorks、Sage300等)。如果一个函数看起来既存在于VBA中,也存在于Excel库中,那么VBA函数在理论上应该是首选的。
使用对象浏览器( object,F2)发现VBA标准库的成员,包括并可能特别是它的Math模块。
https://stackoverflow.com/questions/61088032
复制相似问题