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 で)。