如何使用 ExcelDNA 将变体数组传递给 C#
how to pass variant array to C# using ExcelDNA
如果我有这样的 C# 方法:
[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
生成 "type mismatch" 错误,并且未调用 TestMacro 方法。在 VBA 中,我可以编写 Subs 来接受这种类型的 "Variant"。我如何使用 ExcelDNA 做到这一点?
Excel C API(Excel-DNA 用于公开函数和宏)不支持数组参数内的 sheet 引用。
如果您的主要目标是制作一个可以轻松从 VBA 调用的插件,您可以使用 Excel-DNA 的 COM 服务器功能来公开一个 class 库,您通过工具->引用和创建新对象等从 VBA 调用。然后集成不通过 Excel C API,而是直接通过 COM 接口。
这里有详细的分步示例:https://github.com/Excel-DNA/Samples/tree/master/DnaComServer
如果您想继续使用通过 Application.Run
调用的简单宏,并希望传入包含 sheet 引用的数组,您可能需要传入地址或类似的内容那。
如果我有这样的 C# 方法:
[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
生成 "type mismatch" 错误,并且未调用 TestMacro 方法。在 VBA 中,我可以编写 Subs 来接受这种类型的 "Variant"。我如何使用 ExcelDNA 做到这一点?
Excel C API(Excel-DNA 用于公开函数和宏)不支持数组参数内的 sheet 引用。
如果您的主要目标是制作一个可以轻松从 VBA 调用的插件,您可以使用 Excel-DNA 的 COM 服务器功能来公开一个 class 库,您通过工具->引用和创建新对象等从 VBA 调用。然后集成不通过 Excel C API,而是直接通过 COM 接口。
这里有详细的分步示例:https://github.com/Excel-DNA/Samples/tree/master/DnaComServer
如果您想继续使用通过 Application.Run
调用的简单宏,并希望传入包含 sheet 引用的数组,您可能需要传入地址或类似的内容那。