画像のサイズをレイアウトに合わせて最適化する

Wordで次のような編集操作をしたとき、画像が余白やページ端からはみ出してしまうことがよくあります。はみ出しても自動サイズ補正はされないので、その事後調整をするのがこのマクロです。

  • 別のデータからコピーした大きな画像を貼り付けた
  • ドラッグ操作で拡大しすぎた
  • 余白や段落インデントの変更によりレイアウト幅が変わった

選択している画像を「レイアウトに収まる範囲で最大(最小限の縮小)」の幅にし、縦をそれに合わせることができます。

なお、ここで扱う画像は InlineShape(行内)であることを前提にしています。

画像のサイズを余白や段落に合わせるマクロ

Sub 画像サイズをレイアウトに合わせる()

  Dim aIShp As InlineShape
  Dim widRng As Single '編集領域有効幅
  Dim widFull As Single '画像原寸幅(ポイント)
  
  On Error GoTo OnERR
  For Each aIShp In Selection.InlineShapes
    With aIShp
      '表内画像には非対応
      If .Range.Information(wdWithInTable) = False Then 
        widRng = f_GetMaxWidth(.Range)
        With .Range.Paragraphs(1)   '段落の幅(インデント幅を反映)
          widRng = widRng - (.LeftIndent + .RightIndent)
        End With
        Select Case .Width - widRng
        Case Is > 0 '縮小不足(はみ出し)の対応
          .Width = widRng
        Case Is < 0 '縮小過多の対応
          If .ScaleWidth < 100 Then
            '原寸サイズ(現在幅 と縮小率から算出)
            widFull = .Width / (.ScaleWidth / 100) 
            If widFull < widRng Then
              .ScaleWidth = 100
            Else
              .Width = widRng
            End If
          End If
        End Select
        '縦横比が異なる場合はそろえる
        If .ScaleHeight <> .ScaleWidth Then
          ScaleHeight = .ScaleWidth
        End If
      End If
    End With
  Next aIShp

ENDUP:
  Set aIShp = Nothing
  Exit Sub

OnERR:
  MsgBox Err.Number & ":" & Err.Description, vbCritical, "エラーが発生しました"
  GoTo ENDUP

End Sub
' 選択領域の版面幅(セクションの幅)を求める
Function f_GetMaxWidth(aRng As Range) As Single
  Dim numSec As Variant
  Dim widRng As Single
  With aRng
    'セクション番号を求める
    numSec = .Information(wdActiveEndSectionNumber)  
    'セクション幅(段組を使っていても幅が同じならOK)
    widRng = .Parent.Sections(numSec).PageSetup.TextColumns(1).Width  
  End With
  f_GetMaxWidth = widRng
End Function

特定の段落の有効最大幅を求める

ある段落の有効幅(はみ出さない最大値)は、複数の要素が絡んでくるのがややこしいところです。この処理では、画像挿入位置のRangeから、次のように求めています。

セクション番号を求める
.Information(wdActiveEndSectionNumber)

セクションに設定されている段組みの幅を求める
.Parent.Sections(セクション番号).PageSetup.TextColumns(1).Width

段組み幅から、段落に設定されている左右インデントを減算する
.Paragraphs(1).LeftIndent , .Paragraphs(1).RightIndent

 


 

テキストと並べて配置する画像のサイズ調整についてはこちらです。

画像のデータサイズの最適化についてはこちらです。

タイトルとURLをコピーしました