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オブジェクトに変換できる解析クラスはありますか?

問題は、.netListオブジェクトにもあります。.net配列は正常に機能していますが、辞書またはコレクションタイプのオブジェクトをVBAに渡したいです。

これに対する解決策があるかどうか教えてください。

ありがとう、モニルガンガー

4

1 に答える 1

3

VBA と .NET の間で相互運用を行う場合は、COM を使用する必要があります。これは簡単なスタートです: 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];
    }
}
于 2012-10-10T13:55:27.293 に答える