如何从vba调用xll插件函数?
我有一个第三方XLL插件,我想在我自己的自定义VBA函数中包装。 我如何从我的代码调用第三方function?
谢谢
编辑:至less有两种方法可以做到这一点:
选项1: Application.Run(...)
这看起来是最好的方法,因为在发送到XLL函数之前,参数会自动转换为适当的types。
Public Function myVBAFunction(A as Integer, B as String, C as Double) myVBAFunction = Application.Run("XLLFunction", A, B, C) End Sub
看到这个页面的更多细节。
选项2: Application.ExecuteExcel4Macro(...)
使用这种方法,你必须在将任何parameter passing给XLL函数之前将其转换为string格式。
Public Function myVBAFunction(A as Integer, B as String, C as Double) dim macroCall as String macroCall = "XLLFunction(" & A macroCall = macroCall & "," & Chr(34) & B & Chr(34) macroCall = macroCall & "," & C macroCall = macroCall & ")" myVBAFunction = Application.ExecuteExcel4Macro(macroCall) End Sub
看到这个页面的更多细节。
我知道这是一个迟到的答案,但我发现了这种替代方法,认为这是值得分享的。 您可以像Win32调用一样声明第三方函数。 当您编码时,这在Intellisense完成中显示出额外的好处。
Private Declare Function XLLFunction Lib "C:\PathTo3rdPartyDLL\3rdParty.xll" (ByVal A as Integer, ByVal B as String, C as Double) As Double Sub Function myVBAFunction(A as Integer, B as String, C as Double) as Double myVBAFunction = XLLFunction(A, B, C) End Sub
我只是想澄清e.James的答案的"XLLFunction"
部分,因为如果外接程序尚未加载 ,花了我相当长的一段时间才能找出正确的格式。 这是我使用Application.Run方法调用.xla插件内部方法时发现的。
如果我们假设我们的.xla文件的path是C:\Program Files\example.xla
并且我们想要调用的方法是ExampleMethod
期望一个整数参数,那么调用将如下所示:
Sub XLAExample() Application.Run "'C:\Program Files\example.xla'!ExampleMethod", 10 End Sub
所以你需要构造一个表单的string
"'<ADDIN_PATH>'!<METHOD_NAME>"
为电话,然后只是追加参数
Application.Run <PATH_AND_METHOD>, <PARAMETER_1>, <PARAMETER_2>, ...
不幸的是,我发现CuberChase直接像API调用一样声明方法的版本不适用于.xla文件。