【修復】[MS-Word2013]マクロで図形を描く

EXCELみたいに
四角形(□)を置くところの操作を「マクロの記録」させてみた。
あれソースが貼り付かない?
MS-WordのVBAソースを範囲指定して、Ctrl+Cしてもクリップボードに入らない。
マウスを右クリックしてコンテンツ・メニューからコピーしなければいけない。
んで、ペースト。

Sub Macro1()
'
' Macro1 Macro
'
'
End Sub

何も記録されていなかった。
ぴゅぅ〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜orz
図形に関しては何も記録しないっぽい。
ヘルプを読んでみる。

マクロを作成または記録する

Microsoft Office Word 2007 では、マクロを作成することによって、よく使用する作業を自動化することができます。マクロとは、特定の作業を完了するために必要な一連のコマンドや命令を、1 つのコマンドにまとめたものです。
バージョンが間違っているが、MS-Office 2010も同様で多分時効が過ぎている。
とてもフレンドリーな説明文も2007向けなので2013に脳内で変換しなければいけない。

  • マクロに記録する操作を実行します。
  •   マクロの記録中に、マウスを使用してコマンドやオプションをクリックすることはできますが、文字列を選択することはできません。

文字列を選択するには、キーボードを使用する必要があります。・・・
そう、マウス操作を記録してくれないのだ。
だから「文字列を選択する」にもキーボードで「文字列を選択する」必要があるのだ。
 
では、WORDのマクロで図形を描くにはどうしたらいいんだろう。
図形をクリップボードに記憶した後に、マクロ記録しながらペーストしてみると・・・

ActiveDocument.Shapes.Range(Array("Group 7")).Select
Selection.PasteAndFormat (wdPasteDefault)

しかし依然として図形を作る部分は記録されないので事前設定が必要。
EXCELでは

ActiveSheet.Shapes.AddShape(msoShapeRectangle, 404.25, 81, 72.75, 59.25).Select

のように「マクロの記録」が取れる。
EXCELとWORDのVBAの「オブジェクト・ブラウザー」のShapeのメソッドをザーっと見た限りでは、WORDの図形(Shape)は別物らしい。
それでも、MS-WORD用にアレンジしてみると・・・

ActiveDocument.Shapes.AddShape(msoShapeRectangle, 404.25, 81, 72.75, 59.25).Select

ちゃんと貼れる。
同様にEXCELで図形の操作をマクロで記録し、WORD用に手直してみた結果。

Sub 四角形を貼ってみる()
'
Application.ActiveDocument.Shapes.AddShape(msoShapeRectangle, 273, 55.5, 88.5, 76.5).Select
Dim id As Long
id = ActiveDocument.Shapes.Count
Dim shape As shape
Set shape = ActiveDocument.Shapes(id)
'テキスト編集(TextFrame.ContainingRange.Text)
shape.TextFrame.ContainingRange.Text = "あいうえお"
'枠色(Line.ForeColor etc)
'shape.Line.ForeColor.ObjectThemeColor = wdThemeColorAccent5
shape.Line.ForeColor.RGB = RGB(255, 0, 0)
shape.Line.DashStyle = msoLineDash
'背景色(Fill.ForeColor)
'shape.Fill.ForeColor.ObjectThemeColor = wdThemeColorAccent6
shape.Fill.ForeColor.RGB = RGB(64, 128, 0)
'
End Sub

なお、MS-WORDの操作マクロは「共通設定」に記録されてしまうので、ゴミは消しておくこと。
一気に図形の属性(色など)を変えるには

複数選択Selection.ShapeRange(マウスでもマクロでもOK)した後に
Selection.ShapeRange.Fill.ForeColor.RGB = RGB(200, 32, 32)
Selection.ShapeRange.Line.ForeColor.RGB = RGB(64, 200, 0)

とすると良さそうだ。
いづれにしても、日頃からVBAで訓練(遊ぶ)しないと、
ちょっと操作をマクロ記録して手直してして、大量に・・・は、無理っぽい。
だが
ここまでやるなら、
あのプリミティブすぎる iText クラスライブラリィを駆使しガリガリとJavaコードでPDFを作る方が手っ取り早く思えてしまう。
否。

AddShape("Rectangle", mouse.x, mouse.y, default, default)
SetForeColor()
SetBackColor()
Layout()

まで書くのであれば、
現場で作るお手軽フォーム・エディタの「ツールボックスから図形を貼る」コマンドのソース
とほぼ同じ分量になってしまう。


  • カテゴリー:
  • WORD


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA