Word (VBA)

Word VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : 指定なし)
WordマクロでShapeオブジェクトやInlineShapeオブジェクトのグループ化を行う方法
投稿日時: 20/05/27 19:18:15
投稿者: shun_1010

Word文書内のShapeオブジェクトやInlineShapeオブジェクトを、
それらの重なりの状態を保持したまま、画像として保存することに取り組んでいます。
 
その目的で、Word内の複数のShapeオブジェクトやInlineShapeオブジェクトを、
(python経由で動かす)VBAでグループ化しようとしているのですが、うまくいきません。
 
ネットで調べてみたところ、アプリケーション上でいう「文字列の折り返し」が「行内」になっている場合は、グループ化できないらしいので、Shape.WrapFormat.Typeの値をいじってみたのですが、うまくいきません。
また、InlineShapeオブジェクトはそもそも行内オブジェクトなので、浮動オブジェクトのShapeに変換するなど、特別な操作をしてやらないと、グループ化は不可能なのでしょうか。私の実際のスクリプト上ではShapeに変換しています。
InlineShapeオブジェクトにもGroupItemsというプロパティが用意されているので、グループ化された状態というのは許容するみたいですが。
 
ShapeオブジェクトやInlineShapeオブジェクトがグループ化できる条件を知りたいです。
どうぞよろしくお願い致します。

回答
投稿日時: 20/05/28 17:16:11
投稿者: sk

引用:
InlineShapeオブジェクトはそもそも行内オブジェクトなので、
浮動オブジェクトのShapeに変換するなど、特別な操作をしてやらないと、
グループ化は不可能なのでしょうか。

結論から言えばそういうことになります。
 
・VBA で図形のグループ化を行なう場合は
 ShapeRange オブジェクト(コレクション)の
 Group メソッドを呼び出すことになる。
 
・ShapeRange コレクションのアイテムに
 InlineShape オブジェクトは含まれない。
 
・InlineShape オブジェクトの集合に当たるのは
 InlineShapes オブジェクト(コレクション)であるが、
 このオブジェクトに「図形のグループ化」を実行するメソッドは
 定義されていない。
 
・InlineShape オブジェクトはあくまで「文字列レイヤーの図形」であり、
 文字列を含めての範囲選択は出来ても、図形のみでの(文字列抜きでの)複数選択を
 行なうことが出来ない(ので、図形のみのグループ化を行なうことも出来ない)。
 
引用:
InlineShapeオブジェクトにもGroupItemsというプロパティが用意されているので、
グループ化された状態というのは許容するみたいですが。

グループ化された非インライン図形( Shape オブジェクト)を
インライン図形( InlineShape オブジェクト)に変換すること
(及びそれを元に戻すこと)自体は可能ですので。

投稿日時: 20/05/29 10:27:13
投稿者: shun_1010

丁寧にご解説いただき、ありがとうございます。
大変助かりました!!