使用Excel DNA将Microsoft脚本运行时字典从VBA传递到C#

我对C#和Excel DNA很新。 我目前有一些数据存储在Microsoft脚本运行时字典中,我想传递给我用C#编写的一些方法。 我在C#中创build了一个简单的方法(称为FetchDictionary)将字典作为input,并返回一个整数回到VBA,但我得到一个错误说:“无法运行macros'FetchDictionary'。macros可能不会在此工作簿中可用或所有的macros可能被禁用“当我尝试调用其他函数,我只是传递一个双数组例如我不会遇到这个问题。 我已经添加了一个对我的C#的引用

下面是VBA和C#函数

VBA:

Sub test() Dim test As New Dictionary Dim check As Integer test.Add "1", 1 check = Application.Run("FetchDictionary", test) End Sub 

C#:

  public static int FetchDictionary(Scripting.Dictionary Dict) { int check = Dict.get_Item("1"); return check; } 

我真的很感激任何人的帮助谢谢

由于Scripting.Dictionary参数types不是Excel支持的用于用户定义函数的types之一,因此您的FetchDictionary函数在Excel中不会被Excel-DNA注册为函数。 所以Excel不知道任何有关FetchDictionary ,因此你得到的错误。

此外, Application.Run调用不会像Scripting.Dictionary一样理解COM对象,因此即使可以获得FetchDictionary注册也会失败。 您仅限于Excel可以理解的types,并且可以通过Excel C API传递给已注册的UDF函数。 从VBA来说,这意味着像DoubleString这样的基本types,对于任何更复杂的事情,您都可以使用Variant数组。

Excel-DNA的主要用例是使用.NET制作工作表UDF函数。 不过,在向VBA引用的加载项中添加类也有一些帮助。 要使用VBA调用的某些类创buildExcel-DNA加载项,可以按照以下说明进行操作: