shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Word】VBAで、画像は「レイアウト(文字列の折り返し)」によってオブジェクトが変わる

Wordの画像は「レイアウト(文字列の折り返し)」で行内に設定されているか否かでVBAでの処理方法が違うのでメモ。

例えば、以下で作成したVBAサンプルは、レイアウトが行内に設定された図が対象で、他のレイアウトだと処理できない。Wordのファイル内にある同じ画像でもレイアウト(文字列の折り返し)を変更するとVBAの処理方法が変わる可能性があるので注意が必要です。

shikumika.org

 

上記との比較で具体的にいえば、行内に設定された画像はオブジェクトがInlineShapesで、行内に設定されていない画像はShapesと違いが生じる。

よって、行内に設定されていない画像は、次のとおりShape オブジェクトに対する処理となる。

その場合はTypemsoPictureにする。

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で、画像は「レイアウト(文字列の折り返し)」によって処理方法が違うという備忘録でした。

なお、次の事例は、画像が行内に設定されたままの処理です。

shikumika.org

 

今回のコードを活用するときは、次の処理をいれます。

shikumika.org