我正在使用VB.NET和Excel-DNA Library创建一个Addin for Excel。在我的Addin项目上创建的函数在作为工作表上的公式调用时非常有效。但我也希望它们在编写VBA代码时可用。
所以,假设我在Excel-DNA上创建了一个函数SumCalculation
,如下所示:
<ExcelFunction(Category:="Calculations", Description:="Sum values", Name:="")>
Public Function SumCalculation(<ExcelArgument("First Value to sum")> Value1 As Double,
<ExcelArgument("Second Value to sum")> Value2 As Double) As Double
Return Value1 + Value2
End Function
在Excel上生成并加载XLL时,可以在VBA上调用它,如下所示:
Result = Application.Run("SumCalculation", 1, 1)
但有没有办法直接调用它如下?
Result = SumCalculation(1, 1)
Excel-DNA允许.xll作为COM服务器,您可以从VBA引用和使用它。这将不允许您直接调用该函数,但您可以创建一个可以在VBA例程中实例化的对象,并且您的计算可以是此对象上的方法。这允许您:
以下是COM服务器功能的分步示例:https://github.com/Excel-DNA/Samples/tree/master/DnaComServer
更多细节(虽然不使用简单的NuGet包来构建加载项)也可以在这里找到:
你可以使用“包装”
Function SumCalculation(val1 As Double, val2 As Double) as Variant
SumCalculation = Application.Run("SumCalculation", 1, 1)
End Function
所以在你的代码中你可以输入
Result = SumCalculation(1, 1)