ActiveXコンポーネントのタイプ・ライブラリを構築するやり方によっては、プロパティをVisual LANSA側に返すとき、そのタイプが静的に決まらず、IDispatchタイプになっていることがあります。したがってオブジェクトの具体的なプロパティ、イベント、メソッドは、実行時にしか解決できません。このようなオブジェクトとしては、例えばExcelのWorksheetオブジェクトがあります。
オブジェクトのタイプが既知ではないため、そのプロパティ、イベント、メソッドを直接使う次のようなステートメントは、「Component IDispatch does not contain property/method/event X」というエラーになります。例えば、以下のステートメントでエラーが発生します。
invoke method(#va_excel.worksheets.item<'blad2'>.activate)
このようなIDispatchインターフェース型オブジェクトを使うためには、オブジェクト定義の際に動的参照である旨を指定しておき、そのプロパティ、メソッド、イベントを使う箇所では参照を明示的に記述する必要があります。
例えばExcelのワークシートをアクティブ化する場合、オブジェクトの定義は次のように記述します。
Define_Com Class(#VA_EXCEL.Worksheet) Name(#WorkSheet) Reference(*Dynamic)
コード中では次のように明示的に参照を設定します。
Set_Ref Com(#Worksheet) To(*Dynamic #Excel.Worksheets.Item<'blad2'>)
すると次のようにActiveteメソッドを使えるようになります。
Invoke Method(#Worksheet.Activate)
コンポーネントのヘルプ (F2) には、オブジェクトのタイプが IDispatch インターフェースであることが表示されます。実際のタイプについては、ActiveXコントロールの付属文書を参照してください。