解析器转换.NET字典或列表VBA的等价字典或集合(parser to convert .net d

2019-09-23 21:50发布

我必须对象的.NET字典或列表类型传递给VBA。 但是当我传递的.NET字典,VBA侧我不能够看到字典对.NET侧的元素。

我在C#代码

Dictionary<string,object> dict = new Dictionary<string,object>();
dict.Add("First", "1");
dict.Add("Second", "2");
dict.Add("third", "3");
dict.Add("Forth", "4");

我打电话从C#中的VBA宏作为

Application.Run("MyVBAMacro", dict);

在VBA边我的微距是

public Sub MyVBAMacro(var as variant)

end Sub

我也试图与

public Sub MyVBAMacro(var as Scripting.Dictionary)

end Sub

但并没有为我工作。

在VBA的WATCH窗口我没有得到的字典元素。

所以,我认为.NET和VBA对象是不一样的。 那么,有没有解析类的,我可以我的.NET对象转换为相当于VBA对象?

问题也与.NET List对象。 .NET阵列工作正常,但我想通过对象VBA的字典或集合类型。

请让我知道是否有办法解决这个。

谢谢,Monil Gangar

Answer 1:

您需要使用COM VBA和.NET之间的互操作做时,这是一个简单的开始: COM互操作

但是,它可以变得更复杂一点相当快,我建议你在一般的COM,编组,引用计数和承担这样的任务时,类型库的话题读了。

制作该字典COM可见简单的例子

[ComVisible(true)]
public interface IDictWrapper
{
    object GetByKey(string key);
}

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(IDictWrapper))]
public class DictWrapper: Dictionary<string,object>, IDictWrapper
{
    public object GetByKey(string key)
    {
        return base[key];
    }
}


文章来源: parser to convert .net dictionary or list to VBA's equivalent dictionary or collection