文書内に挿入した画像に枠を付ける(Word)

文書内に挿入した画像に枠を付ける

f:id:akashi_keirin:20210228191329j:plain

Wordの文書内に挿入した画像に枠囲いを付けるのは、結構めんどくさいので、枠で囲うマクロを作った。

こんなことができます

Wordの文書内に挿入した画像に、ワンクリックで囲みを付ける。ただ、それだけ。

目次

画像に枠囲みを施すのはめんどくさい

Wordで文書中に画像を挿入し、枠囲みを施すのは実にめんどくさい。

このことをまず示す。

画像の挿入

f:id:akashi_keirin:20210228191334j:plain

まず、「挿入」タブをクリックする。

f:id:akashi_keirin:20210228191336j:plain

次は、「画像」をクリック。

f:id:akashi_keirin:20210228191339j:plain

画像ファイルのある場所をクリックする。

f:id:akashi_keirin:20210228191344j:plain

ファイルを選び、[挿入]をクリック。

f:id:akashi_keirin:20210228191347j:plain

やっと画像が挿入された。デカっ!

f:id:akashi_keirin:20210228191350j:plain

テキトーなサイズに調整しよう。不愉快きわまりない画像なので小さくしてやれ。

たかが画像を挿入するだけで、こんなに手間がかかるのである。(ちなみに、このとき「段落」設定で「行間」を「固定値」にしていると、ちょっとビックリするような状態になる。)

画像に枠線を施す

次は、牛だ。

f:id:akashi_keirin:20210228191352j:plain

いや、違った。枠線だ。

f:id:akashi_keirin:20210228191356j:plain

挿入した画像を右クリックし、コンテキストメニューの「図の書式設定」をクリック。

f:id:akashi_keirin:20210228191359j:plain

「塗りつぶしと線」アイコンをクリック。

f:id:akashi_keirin:20210228191402j:plain

線の種類とか色をテキトーに設定。

f:id:akashi_keirin:20210228191405j:plain

画像に枠線が施された。

どうだろう。めちゃくちゃめんどくさくないか?

こういうときのための、マクロですよ!

画像に枠囲みを施すマクロ

まずはコードをお目にかけよう。

リスト1 標準モジュール
Public Sub SetBordersForFigureMain()    '……(1)'
  Call setBordersForFigure
End Sub

Private Sub setBordersForFigure( _
  Optional ByVal LineStyle As WdLineStyle _
                              = wdLineStyleSingle, _
  Optional ByVal LineWidth As WdLineWidth _
                              = wdLineWidth100pt)  '……(2)'
  Dim ilShp As InlineShape
  If Selection.Type = wdSelectionInlineShape Then  '……(3)'
    If Selection.InlineShapes.Count = 0 Then Exit Sub  '……(4)'
    Set ilShp = Selection.InlineShapes(1)
  Else
    Exit Sub
  End If
  With ilShp.Borders    '……(5)'
    .OutsideLineStyle = LineStyle
    .OutsideLineWidth = LineWidth
  End With
End Sub

(1)の

Public Sub SetBordersForFigureMain()
  Call setBordersForFigure
End Sub

は、下のsetBordersForFigureメソッドを呼び出しているだけ。メインの処理はそっちに書いてある。

で、setBordersForFigureメソッド。

(2)の

Private Sub setBordersForFigure( _
  Optional ByVal LineStyle As WdLineStyle _
                              = wdLineStyleSingle, _
  Optional ByVal LineWidth As WdLineWidth _
                              = wdLineWidth100pt) 

で引数の設定。

LineStyleは線の種類で、LineWidthは線の太さ。

両方ともOptionalにして、デフォルト値は一番よく使うっぽいやつにしてある。

(3)の

If Selection.Type = wdSelectionInlineShape Then
  If Selection.InlineShapes.Count = 0 Then Exit Sub  '……(4)'
  Set ilShp = Selection.InlineShapes(1)
Else
  Exit Sub
End If

は、選択範囲のチェック。

Selectionオブジェクトの状態を確認して、実行するかどうかを判定。

今回は、〝選択している画像に枠線を施す〟というマクロにする。

Selection.Typeの値がwdSelectionInlineShapeだったら、挿入された画像だという判定にする。

ところが、困ったことに、選択中のオブジェクトが行内に挿入した〝図形〟であっても「Selection.Type = wdSelectionInlineShape」がTrueになってしまう。

で、そのときには、なぜかInlineShapesCountプロパティが0なので、

Set ilShp = Selection.InlineShapes(1)

で実行時エラーになってしまう。

わけがわからないが、仕方がないので(4)の

If Selection.InlineShapes.Count = 0 Then Exit Sub

で、Selection.InlineShapes.Count0のときは何もせずに抜けることにした。うーむ、わけわからん。

ともかく、ここまで来ると、

Set ilShp = Selection.InlineShapes(1)

により、変数ilShpには選択中の画像がぶち込まれているので、あとは(5)の

With ilShp.Borders
  .OutsideLineStyle = LineStyle
  .OutsideLineWidth = LineWidth
End With

で線の種類と線の太さを設定しておしまい。

使ってみる

クイック アクセス ツール バーにマクロを登録して使ってみる。

f:id:akashi_keirin:20210228191408g:plain

Yes! 超便利、なう。

おわりに

逆に、画像に施した枠線を除去するマクロの書き方がわからない。

誰か知っている人がいたら教えろ教えてください。

追記

枠線を消すマクロ、できました。

akashi-keirin.hatenablog.com