使用Excel DNA将Microsoft Scripting Runtime字典从VBA传递到C#

时间:2017-10-10 00:45:21

标签: c# excel vba excel-vba excel-dna

我是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;
    }

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

1 个答案:

答案 0 :(得分:0)

您的FetchDictionary函数不会被Excel-DNA注册为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引用的加载项中添加类时,也有一些帮助。要使用可从VBA调用的某些类创建Excel-DNA加载项,您可以按照以下说明操作: