今回はWord VBAネタ。
Wordで業務マニュアル等を作っていると、スクリーンショットの一部を赤枠で囲うことがよくある。
通常はオートシェイプで塗りつぶし無しで作るが、この赤枠は枠の部分しかマウスで掴むことが出来ず、移動させるつもりがリサイズしてしまったり、背景にある画像をつかんでずらしてしまったり、なかなか扱いにくい。
(慎重にやれば良いのだが、細かいところに神経を使うのが面倒くさい。もっとザクっとおおざっぱに操作したい。)
そこで、VBAで真ん中を掴める赤枠を作ってみた。下図のようにマウスカーソルを重ねてみると違いが分かる。
コードは以下のとおり。
Sub AddSpecialRedFrame(ByVal w As Integer, ByVal h As Integer) '真ん中をつかめる赤枠 Application.ScreenUpdating = False On Error GoTo Final Dim x As Double, y As Double 'カーソルの位置から座標を割り出す。+5は微調整 x = Selection.Information(wdHorizontalPositionRelativeToPage) + 5 y = Selection.Information(wdVerticalPositionRelativeToPage) + 5 With ActiveDocument.Shapes.AddShape(msoShapeRectangle, x, y, w, h) With .Fill .Transparency = 1 .ForeColor.RGB = vbRed End With With .Line .Weight = 2.25 .ForeColor.RGB = vbRed End With End With Final: Application.ScreenUpdating = True End Sub 'AddSpecialRedFrameを使って100×30の囲み枠を追加するサンプルコード Sub test() Call AddSpecialRedFrame(100, 30) End Sub
上記のコードをWord VBAに貼り付けてtestマクロを実行すれば、カーソル付近に赤枠が追加される。
これは単に、オートシェイプの塗りつぶしを無くすんじゃなくて、透明度を100%にしているだけなのでVBAでなくても出来る。
ただマクロに登録しておくとわざわざ手作業で透明度100%にする必要が無いので便利だと思う。