【VBA】Word文書中に埋め込んだOLEオブジェクト内のVBAを呼び出す方法
あまり使う場面は無いが、例えばWord文書内にExcelの表やVisioで描いた図などがOLE形式で貼り付けてあると、Ctrl+Fの検索ではそれらの中身までは検索されない。
それらの中身を検索するには、表や図をダブルクリックして編集状態にしてから検索する必要がある。
それは面倒なので、Word文書のVBAからOLEオブジェクトのVBAを呼び出し、OLEオブジェクト内を検索するコードを考えた。
以下、Word文書のVBAのコード。
' 検索対象のOLEオブジェクトをアクティブにする。
' ※これが重要。これをしないとオブジェクトが参照できずに実行時エラーとなる。
ActiveDocument.InlineShapes(1).Activate
' OLEオブジェクトのメソッドを呼び出す。
' この例ではExcelのオブジェクトを対象としている為、Excelのメソッドを呼び出しているが、ClassTypeによって呼ぶメソッドは異なるかもしれないので適宜書き換えること。
Set ret = ActiveDocument.InlineShapes(1).OLEFormat.Object.worksheets(1).Cells.Find("めろん")
If ret Is Nothing Then
MsgBox "見つからない"
Else
MsgBox ret.Value & " は " & ret.Column & " 列目の " & ret.Row & " 行目に見つかった。"
End If
上記の場合だとActiveDocument.InlineShapes(1).OLEFormat.Object がWorkbookオブジェクトのことだと理解してしまえば、あとはExcelのVBAを記述するだけである。