ruby-robotの夢

cygwin-ruby,qgisの達人を目指す奮闘記

WORD-VBA 埋め込みシェイプにつけたキャプションをグループ化する

最近word を使った作業が多くなり、いろいろ小面倒くさいことをマクロで処理しようとしている。
よくあるのが、地図画像を行内埋め込み(InlineShape)した上に、地名等のキャプションをテキストボックスで配置したもの。
これを、動かしたり、大きさ調整するときには、テキストボックスの配置が変わるので、連動するようにしたい。
手動でやるなら、①埋め込み配置⇒全面配置にし、②それを最背面にし、③テキストボックスと合わせて選択し、④グループ化し、⑤それをまた埋め込み配置にする。というプロセスになる。
何気なくやっていると、③は、オブジェクト選択しており、結構面倒だ。
最近、7つの地区の地図を、表内に埋め込んでいたのを、調整したくなったので、良い機会と考えてマクロを作ってみた。
なお、これらの処理は、マクロ記録ができない。

○はじめ思いついた方法
 ①選択したinlineshape の領域をページ基準で取得する。
 ②ページ内のshape の領域をページ基準で取得する。
 ③①をshapeにする。
 ④③を最背面にする。
 ⑤①と②から、①に重なるshapeを選択し、④と共にグループ化する。
 ⑥埋め込む
これは面倒くさい。もっと良い方法はないか?
○最終的な方法
 選択状態は、行範囲とする。(Inlineshapeもshapeも選択される)
 ①選択範囲を記憶する。
 ②選択範囲内inlineshapeをshapeにする。
 ③②を最背面にする。
 ④選択範囲を再選択する。(背景地図も含めて徳地整が選択される。)
 ⑤選択範囲内shapeを選択する。
 ⑥グループ化する。
 ⑦埋め込む
これって、座標の処理が不要ではないか。
rubyのようにシンプルなコードになった。感激。

  Sub shp_inlineshape2group_il()
' 選択範囲の埋め込みinlineshapeを前→最背面→他のshpとグループ化した後inlineに
  Set rng = Selection.Range
  set a=Selection.InlineShapes(1).ConvertToShape
  a.select
  Selection.ShapeRange.ZOrder msoSendToBack
  rng.ShapeRange.Group.ConvertToInlineShape    '全てのshapeを再選択
End Sub

set a=Selection.InlineShapes(1).ConvertToShape
a.select
Selection.ShapeRange.ZOrder msoSendToBack

Selection.InlineShapes(1).ConvertToShape.ShapeRange.ZOrder msoSendToBack
 と書けるともっとよいが、これはできなかった。