在没有 Application.run 的情况下,使用 Excel-DNA 在 VBA 上创建函数

Using Excel-DNA created functions on VBA without Application.run

我正在使用 VB.NET 和 Excel-DNA Library 为 Excel 创建插件。 在我的插件项目上创建的函数在工作表上作为公式调用时可以完美运行。但我也希望它们在编写 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

当 XLL 在 Excel 上生成并加载时,可以在 VBA 上调用它,如下所示:

Result = Application.Run("SumCalculation", 1, 1)

但是有没有办法像下面这样直接调用呢?

Result = SumCalculation(1, 1)

你可以使用“包装器”

Function SumCalculation(val1 As Double, val2 As Double) as Variant
    SumCalculation = Application.Run("SumCalculation", 1, 1)
End Function

所以在你的代码中你可以输入

Result = SumCalculation(1, 1)

Excel-DNA 允许 .xll 作为您可以从 VBA 引用和使用的 COM 服务器。这将不允许您直接调用该函数,但您可以创建一个可以在 VBA 例程中实例化的对象,并且您的计算可以是该对象的方法。这允许您:

  • 在 VBA、
  • 中公开丰富的对象模型以进行编程
  • 其中 COM 对象共享其余 add-in 的 AppDomain(内存 space),因此可以共享缓存等,并且
  • 以不需要管理员权限的方式实现注册。

这是 COM 服务器功能的 step-by-step 示例:https://github.com/Excel-DNA/Samples/tree/master/DnaComServer

更多详细信息(虽然没有使用简单的 NuGet 包构建 add-in)也可以在这里找到: