2

Excel/VBA は、私が働いている組織で非常に広く使用されています。少し簡単にするために、VBA で使用する .NET/VS2010 の広く使用可能な COM クラスに取り組んでいます。

ただし、for each ループをサポートする COM オブジェクトを実装できないようです。この動作はどのように実装できますか?

少し指定するには:

多くの場合、いくつかのクラス (SomeClass と呼びましょう) とそれに付随する特殊なコレクション クラス (SomeClassCollection と呼びましょう) を作成します。純粋な .NET では、一般的なコンテナー (List(Of SomeClass) など) に必要な特殊な拡張機能を簡単に作成できるため、多くの場合、これは必要ありません。ただし、VBA/COM では、ほとんどのカスタム クラスに特化した別のコレクション クラスを作成する必要があります。

私にとって、SomeClassCollection COM 準拠オブジェクトを作成する最も明白な方法は、List(Of SomeClass) などの一般的な .NET コレクションを継承してから、特殊な関数を作成し、基本的な関数とプロパティを COM で表示できるようにすることです (例: Add、Remove、カウントなど)

for each が (.NET で) サポートされている .NET コレクションを継承しているため、何らかの方法でこの機能を COM コレクション クラスにも転送できるのではないかと考えていました (ワークシート、ワークブックなどのコレクションを参照)。それぞれをサポートする Excel で)。

4

1 に答える 1

3

IEnumerator GetEnumerator()一般に、署名付きのメソッドを公開し、-4のDISPID(DISPID_NEWENUM)でマークするCOM可視クラスを実装する必要があります。

詳細はこちらで説明しています

于 2012-09-26T09:44:51.423 に答える