我是C#和Excel DNA的新手。我目前有一些存储在Microsoft Scripting Runtime字典中的数据,我想传递给我用C#编写的一些方法。我在C#中创建了一个简单的方法(称为FetchDictionary),将字典作为输入并将一个整数返回给VBA,但是我得到一个错误: "无法运行宏' FetchDictionary'。宏可能在此工作簿中不可用,或者所有宏都可能被禁用" 当我尝试调用其他函数时,我只是传递一个双数组,例如我没有遇到这个问题。 我添加了对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;
}
我真的很感激任何人的帮助 感谢
答案 0 :(得分:0)
您的FetchDictionary
函数不会被Excel-DNA注册为Excel中的函数,因为Scripting.Dictionary
参数类型不是Excel支持的用户定义函数类型之一。所以Excel对FetchDictionary
一无所知,因此你会得到错误。
此外,Application.Run
调用将无法理解Scripting.Dictionary
之类的COM对象,因此即使可以注册FetchDictionary
也会失败。您只能使用Excel可以理解的类型,并且可以通过Excel C API传递给已注册的UDF函数。从VBA开始,这意味着原始类型,如Double
和String
,对于任何更复杂的类型,您都使用Variant
数组。
Excel-DNA的主要用例是使用.NET制作工作表UDF函数。但是,在向可以从VBA引用的加载项中添加类时,也有一些帮助。要使用可从VBA调用的某些类创建Excel-DNA加载项,您可以按照以下说明操作: