1

我必须将 .net 字典或对象的列表类型传递给 VBA。但是当我在 VBA 端传递 .net 字典时,我无法在 .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。

请让我知道是否有解决方案。

谢谢,莫尼尔甘加尔

4

1 回答 1

3

在 VBA 和 .NET 之间进行互操作时需要使用 COM 这是一个简单的开始:COM Interop

但它很快就会变得更加复杂,我建议在执行此类任务时阅读通用 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];
    }
}
于 2012-10-10T13:55:27.293 回答