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

问题描述 投票:1回答:2

我正在使用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 vb.net vba excel-dna
2个回答
2
投票

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

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

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

更多细节(虽然不使用简单的NuGet包来构建加载项)也可以在这里找到:


0
投票

你可以使用“包装”

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

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

Result = SumCalculation(1, 1)
© www.soinside.com 2019 - 2024. All rights reserved.