使用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来说,这意味着像Double
和String
这样的基本types,对于任何更复杂的事情,您都可以使用Variant
数组。
Excel-DNA的主要用例是使用.NET制作工作表UDF函数。 不过,在向VBA引用的加载项中添加类也有一些帮助。 要使用VBA调用的某些类创buildExcel-DNA加载项,可以按照以下说明进行操作: