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
と書けるともっとよいが、これはできなかった。