SEのネタ帳

発見したことや気付いた内容を書き留めたり、作った便利ツールなどを置いておく場所。主に仕事関係のことを書きます。

【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を記述するだけである。