Home » エクセルマクロ・Excel VBAの使い方 » DrawingObjectsオブジェクト » VBAで選択図形がグループ化されているかどうか判定する

VBAで選択図形がグループ化されているかどうか判定する

対象:Excel2010, Excel2013, Windows版Excel2016

「excel vba 選択されたオブジェクトがGroupobjectか判定」
という検索キーワードに気付きました。

Excel VBAで選択されている描画オブジェクト(図形)が、グループ化されているかどうかを判定するには、どうすればいいのかを探していらしたのでしょう。

[スポンサードリンク]

Shape.TypeやShapeRange.TypeがmsoGroupのときにグループ化されている

図形がグループ化されているかどうかは、ShapeオブジェクトやShapeRangeオブジェクトのTypeプロパティで判定できます。グループ化されているときにShapeやShapeRangeのTypeプロパティが、

オブジェクトブラウザー:ShapeRange.Type

Office.MsoShapeType列挙に定義されている定数msoGroupを返すかを調べることで、

オブジェクトブラウザー:MsoShapeType.msoGroup

グループ化された図形かどうかを判定できます。

選択図形がグループ化されているかを判定するサンプルマクロ

選択図形がグループ化されているかを判定するには、以下のSubプロシージャが参考になるでしょう。


Sub 選択図形がグループ化されているか判定()
 On Error GoTo ErrHndl
 Select Case Selection.ShapeRange.Type
  Case msoGroup
   MsgBox "グループ化されています。"
  Case msoShapeTypeMixed
   MsgBox "図形を1つだけ選択して実行してください。"
  Case Else
   MsgBox "グループ化されていません。"
 End Select
 Exit Sub

ErrHndl:
 MsgBox "図形を選択してから実行してください。"
End Sub

サンプルマクロの解説

Excel VBAのSelectionプロパティは、図形が選択されているときにはOvalやRectangleなどの、レガシーな固有のオブジェクトを返します。そこで「Selection.ShapeRange」というオブジェクト式で、ShapeRangeオブジェクトを取得しています。

オブジェクトブラウザー:Oval.ShapeRange

取得したShapeRangeオブジェクトのTypeプロパティを調べて、
  Select Case Selection.ShapeRange.Type

msoGroupだったときにグループ化されている旨のメッセージを表示しています。
  Case msoGroup
   MsgBox "グループ化されています。"

ただし、複数の図形が選択されていたときにShapeRange.TypeはmsoShapeTypeMixedを返しますので、

オブジェクトブラウザー:MsoShapeType.msoShapeTypeMixed

図形を1つだけ選択して実行するよう促すメッセージを表示しています。
  Case msoShapeTypeMixed
   MsgBox "図形を1つだけ選択して実行してください。"

また、そもそも図形が選択されていないときに「Selection.ShapeRange.Type」が実行されるとエラーが発生しますから、
  On Error GoTo ErrHndl
 ErrHndl:
  MsgBox "図形を選択してから実行してください。"
とエラートラップを行っています。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » DrawingObjectsオブジェクト » VBAで選択図形がグループ化されているかどうか判定する

TrackBack:0

TrackBack URL
[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » DrawingObjectsオブジェクト » VBAで選択図形がグループ化されているかどうか判定する

Copyright © インストラクターのネタ帳 All Rights Reserved.

.