Wordの画像は「レイアウト(文字列の折り返し)」で行内に設定されているか否かでVBAでの処理方法が違うのでメモ。
例えば、以下で作成したVBAサンプルは、レイアウトが行内に設定された図が対象で、他のレイアウトだと処理できない。Wordのファイル内にある同じ画像でもレイアウト(文字列の折り返し)を変更するとVBAの処理方法が変わる可能性があるので注意が必要です。
上記との比較で具体的にいえば、行内に設定された画像はオブジェクトがInlineShapesで、行内に設定されていない画像はShapesと違いが生じる。
よって、行内に設定されていない画像は、次のとおりShape オブジェクトに対する処理となる。
その場合はTypeもmsoPictureにする。
shape画像のサイズ変更のVBAサンプル
ファイル内の画像(「行内」でないもの)の場合、以下が一括更新のサンプル。
Sub shape画像のサイズ変更() Dim 画像 As Object For Each 画像 In ActiveDocument.Shapes ' If 画像.Type = msoPicture Then '画像データに対してのみ処理を行う 画像.LockAspectRatio = msoTrue '縦横比を固定する:ON 画像.Width = 300 End If Next End Sub
どうやら、WordのVBAの場合、図形と画像の違いも把握しておく必要がありそうです。画像ではなく、図形ならShape オブジェクトになるようです。koukimra.com
以上、WordのVBAで、画像は「レイアウト(文字列の折り返し)」によって処理方法が違うという備忘録でした。
なお、次の事例は、画像が行内に設定されたままの処理です。
今回のコードを活用するときは、次の処理をいれます。