VBAで文書にインライン画像を挿入する(Word)
VBAで文書に画像を挿入するときの注意
最近、Wordでマニュアルとか手順書の類を作成することがやたら増えた。
PDF配布を前提とすると、画像をふんだんに盛り込むことができるので、非常に良いのだが、当然画像の挿入が非常にめんどくさくなってくる。
そこで、VBAで画像挿入を楽にできるようにしようとした。
そのときに、ちょっと予定外のことが起こったので、報告。
カーソル位置にインライン画像を挿入するマクロ
まずは、カーソル位置にインライン画像を挿入するマクロ。
ドキュメントのあるフォルダ内に、「img
」というフォルダがあり、その中に「アホの坂田.png
」という画像ファイルがあるとする。
リスト1
Private Sub test01() Dim imgPath As String imgPath = ThisDocument.Path & "\img\アホの坂田.png" Dim ilShp As InlineShape Set ilShp = Selection.Range.InlineShapes.AddPicture(imgPath) Call ilShp.Select End Sub
カーソル位置のRange
オブジェクトのInlineShapes
プロパティからInlineShapes
コレクションオブジェクトを取得し、そのAddPicture
メソッドにより、画像を挿入する。
AddPicture
メソッドの返り値はInlineShape
オブジェクトなので、InlineShape
型の変数ilShp
で受け取り、最後にSelect
メソッドを実行して、挿入した画像を選択状態にするようにしている。
リスト1を実行すると、当然、
こうなる。
実にめでたい。
画像の大きさを変えようとすると悲劇が起こる
しかし……。
これは全然だめである。
画像の書式を調べてみる。
なんと、デフォルトでは「縦横比を固定する」のチェックが外れているのである。なんでやねん。
LockAspectRatioプロパティ
画像の縦横比の固定を司るのは、[InlineShape].LockAspectRatio
プロパティである。
画像を挿入するマクロ、リスト1を、次のように変えて実行してみる。
リスト2
Private Sub test01() Dim imgPath As String imgPath = ThisDocument.Path & "\img\アホの坂田.png" Dim ilShp As InlineShape Set ilShp = Selection.Range.InlineShapes.AddPicture(imgPath) Call ilShp.Select Debug.Print ilShp.LockAspectRatio End Sub
画像挿入直後のLockAspectRatio
プロパティの値をイミディエイトに出力する。
結果は、
このとおり、「0
」と出た。
オブジェクト ブラウザーで調べると、
LockAspectRatio
プロパティはMsoTriState
型。
同様にオブジェクト ブラウザーで調べると、MsoTriState
列挙体のメンバは、
このとおり。
つまり、LockAspectRatio
プロパティのデフォルト値はmsoFalse
だとわかる。
これは、タンザニアのイカンガーである。
コードの修正
そこで、リスト1を次のように書き換える。
リスト3
Private Sub test01() Dim imgPath As String imgPath = ThisDocument.Path & "\img\アホの坂田.png" Dim ilShp As InlineShape Set ilShp = Selection.Range.InlineShapes.AddPicture(imgPath) ilShp.LockAspectRatio = msoTrue Call ilShp.Select End Sub
画像を挿入するや否や、LockAspectRatio
プロパティの値をmsoTrue
にするのである!
実行結果
当然、画像の書式は、
このとおり、ちゃんと「縦横比を固定する」にチェックが入っている。
うむ、万全である!
おわりに
手動で動画を挿入すると、普通に「縦横比を固定する」にチェックが入っているものだから、ちょっと焦りましたよ。