2017-10-10 28 views
2

我对C#和Excel DNA非常陌生。我目前有一些数据存储在Microsoft脚本运行时字典中,我想将它传递给我用C#编写的一些方法。我在C#中创建了一个简单的方法(称为FetchDictionary),将字典作为输入并返回一个整数回到VBA,但是我得到一个错误: “无法运行宏'FetchDictionary'。宏可能不可用工作簿或所有宏可能被禁用“ 当我尝试调用其他函数,例如我只是传递双数组时,我不会遇到此问题。 我添加了一个参考我的C#来将Microsoft脚本运行时字典从VBA传递到C#使用Excel DNA

下面是两个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

谢谢Dy.Lee。我仍然得到错误。它似乎是字典类型是问题... – user318062

+0

感谢Anurag编辑帖子:) – user318062

回答

0

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

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

Excel-DNA的主要用例是使用.NET制作工作表UDF函数。但是,向可以从VBA引用的加载项添加类也有一些帮助。为了使一个Excel-DNA附加了一些类,可以从VBA调用的,你可以按照下列指示:

相关问题