使用 Excel-DNA 在 VBA 上创建函数,无需 Application.run

Qui*_*ima 1 vb.net excel vba excel-dna

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

因此,假设我SumCalculation在 Excel-DNA 上创建了一个函数,如下所示:

<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
Run Code Online (Sandbox Code Playgroud)

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

Result = Application.Run("SumCalculation", 1, 1)
Run Code Online (Sandbox Code Playgroud)

但是有什么方法可以像下面这样直接调用它吗?

Result = SumCalculation(1, 1)
Run Code Online (Sandbox Code Playgroud)

Gov*_*ert 5

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

  • 公开丰富的对象模型以在 VBA 中进行编程,
  • 其中 COM 对象共享加载项其余部分的 AppDomain(内存空间),因此可以共享缓存等,并且
  • 注册是以不需要管理员权限的方式实现的。

以下是 COM 服务器功能的分步示例:https://github.com/Excel-DNA/Samples/tree/master/DnaComServer

更多详细信息(尽管没有使用简单的 NuGet 包来构建加载项)也可以在此处找到: