繁体   English   中英

如何使用 ExcelDNA 将变量数组传递给 C#

[英]how to pass variant array to C# using ExcelDNA

如果我有这样的 ac# 方法:

    [ExcelFunction(IsMacroType = true)]
    public static void TestMacro([ExcelArgument(AllowReference = true)]object rngTable, [ExcelArgument(AllowReference = true)]object varCalc)
    {
        System.Windows.Forms.MessageBox.Show("TestMacro called!");
    }

我可以使用以下代码从 VBA 成功调用它:

Sub TestIt()
    Application.Run "TestMacro", Range("a1"), Range("a2")
End Sub

但是从这个代码调用它:

Sub TestIt2()
    Dim v(1 To 1) As Variant
    Set v(1) = Range("a2")
    Application.Run "TestMacro", Range("a1"), v
End Sub

生成“类型不匹配”错误,并且不会调用 TestMacro 方法。 在 VBA 中,我可以编写 Subs 来接受这种类型的“变体”。 我如何使用 ExcelDNA 执行此操作?

Excel C API(Excel-DNA 使用它来公开函数和宏)不支持数组参数内的工作表引用。

如果您的主要目标是制作一个可以从 VBA 轻松调用的加载项,您可以使用 Excel-DNA 的 COM 服务器功能来公开一个类库,您可以通过“工具”->“引用”从 VBA 调用并创建新对象等等。然后集成不通过 Excel C API 而是直接通过 COM 接口。

这里有一个很好的分步示例: https : //github.com/Excel-DNA/Samples/tree/master/DnaComServer

如果您想继续使用通过Application.Run调用的简单宏,并希望传入包含工作表引用的数组,则可能需要传入地址或类似内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM