「wordマクロ 表に画像を挿入」
といった検索キーワードでアクセスがあることに気がつきました。
Word VBAを使って、表の中に画像を挿入するにはどのようなコードを書けばいいのかを調べていらしたのでしょう。
「Word VBA 表内 画像」
といった検索も、同様のコードを探していたのかもしれません。
表内に画像を挿入するサンプルマクロ
Cドライブのtempフォルダーに挿入したい画像sample.jpgを置き、表が存在するWord文書がアクティブな状態で、以下のWordマクロを実行してください。
Dim cel As Cell
Set cel = ActiveDocument.Tables(1).Cell(1, 1)
ActiveDocument.InlineShapes.AddPicture _
FileName:="C:\temp\sample.jpg", _
Range:=cel.Range
End Sub
アクティブ文書の1つ目の表の、1行1列目のセルに、画像「C:\temp\sample.jpg」が挿入されます。
サンプルマクロで行っている処理
画像をShapeオブジェクトにするかInlineShapeにするかですが、わざわざ表内に挿入したいということですから、InlineShapeとして挿入する仕様にしました。
Shapeオブジェクトにした場合は、文字列の折り返し設定によっては、アンカーが表内に存在するにも関わらず表とは無関係の位置に画像表示される可能性もあるためです。
上記のWordマクロで行っている処理は以下のとおりです。
まず、拙著『Excel VBAユーザーのためのWord VBA入門(2):Tableの基本編』の、「10-1. Table.CellメソッドでCellを取得する」でも解説している、TableオブジェクトのCellメソッドを使って、
画像を挿入する先のセルを取得し、Cell型のオブジェクト変数celに代入しておきます。
Dim cel As Cell Set cel = ActiveDocument.Tables(1).Cell(1, 1)
つづいて、InlineShapesコレクションに用意されているAddPictureメソッドを使って、
画像を挿入しています。
ActiveDocument.InlineShapes.AddPicture _ FileName:="C:\temp\sample.jpg", _ Range:=cel.Range
InlineShapes.AddPictureメソッドの引数RangeにはRangeオブジェクトを指定する必要があるため、Cellオブジェクトに用意されているRangeプロパティを使っています。
ActiveDocument.InlineShapes.AddPicture _ FileName:="C:\temp\sample.jpg", _ Range:=cel.Range
Range.InlineShapes.AddPictureでも書けるけれど
なお、InlineShapes.AddPictureメソッドを使った部分は、
cel.Range.InlineShapes.AddPicture _ FileName:="C:\temp\sample.jpg"
と書いても同じ結果になるのですが、画像を挿入する先であるセルを、InlineShapes.AddPictureメソッドの引数Rangeで指定するほうが、応用しやすいように思えるので、
ActiveDocument.InlineShapes.AddPicture _ FileName:="C:\temp\sample.jpg", _ Range:=cel.Range
をおすすめしておきます。
Home » ワードマクロ・Word VBAの使い方 » 表・テーブル » Word VBAで表内に画像を挿入する