サードパーティの ActiveX グリッド コントロール (10Tec による iGrid) の複数のインスタンスを持つユーザー フォームがあります。同じステートメントを使用してすべてのグリッドを初期化するサブがあります。
Sub SetupIgrid(ig as iGrid)
ig.RowMode = True
ig.MultiSelect = True
ig.Appearance = igAppearanceFlat
ig.Editable = False
End Sub
このサブに iGrid インスタンスを渡すことはできません。Excel VBA は、次のような呼び出しで常に「型の不一致」エラーを表示します。
SetupIgrid igAuds
他に何も助けませんでした。たとえば、Variant または Object パラメータのように iGrid を渡すことができますが、そこから実際の iGrid タイプを抽出しようとすると、同じタイプの不一致が発生します。
Sub SetupIgrid(igObj as Object)
Dim ig as iGrid
Set ig = igObj
ハックを使用して、ObjPtr で取得した Long ポインターを iGrid に渡し、それを API CopyMemory で iGrid タイプに変換しても、MS Excel VBA は iGrid メンバーにアクセスできません。
このタスクの重要なポイントは、IntelliSense 機能を使用するために SetupIgrid サブに実際の iGrid オブジェクトを用意することです。これで、オブジェクト (バリアント) またはその他のものとしてそれを取得できますが、ドットを押したときに IntelliSense リストが表示されないことを確認してください。