如何从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文件。