コレクションには単独のオブジェクトを追加するためのAddメソッドが用意されていることが多いのですけれど、Shapesコレクションの場合には「Add〇〇」といった名前のメソッドがたくさん用意されています。
そのひとつAddShapeメソッドを使うと、
[挿入]タブ-[図形]ボタンの、[四角形]以下に表示される図形を、
挿入できます。
Shapes.AddShapeで挿入された全ShapeがmsoAutoShapeではない
このShapes.AddShapeメソッドで挿入されたShapeのTypeプロパティが、必ずmsoAutoShape(直値:1)を返してくれればいいのですが、一部はmsoCallout(直値:2)を返します。
また、定数名に「Callout」を含むものを指定した場合に、すべてがmsoCalloutを返すというわけでもありません。
TypeがmsoCalloutを返すShapeを確認するサンプルマクロ
そこで、TypeプロパティがmsoCalloutを返すShapeを確認するためのマクロを作ってみました。
Dim sh As Worksheet
Set sh = Sheets.Add(Before:=Sheets(1))
Dim i As Long
For i = msoShapeRectangle To msoShapeBalloon
With sh.Shapes.AddShape(i, 50, 55 * i, 50, 50)
.TextFrame2.TextRange.Text = i
If .Type = msoCallout Then
.Line.Weight = 3
.Line.ForeColor.RGB = RGB(255, 0, 0)
Debug.Print i
End If
Next i
End Sub
サンプルマクロで行っている処理
上記のSubプロシージャを実行すると、アクティブなブックの先頭にワークシートが挿入され、
Dim sh As Worksheet
Set sh = Sheets.Add(Before:=Sheets(1))
定数の値順に図形が作成され、
Dim i As Long
For i = msoShapeRectangle To msoShapeBalloon
With sh.Shapes.AddShape(i, 50, 55 * i, 50, 50)
定数の実際の数値が図形内に書き込まれます。
.TextFrame2.TextRange.Text = i
TypeプロパティがmsoCalloutを返すShapeの場合には、
If .Type = msoCallout Then
線が目立つようにして、
.Line.Weight = 3
.Line.ForeColor.RGB = RGB(255, 0, 0)
数値をイミディエイトウィンドウに出力しています。
Debug.Print i
TypeプロパティがmsoCalloutを返すShapeオブジェクトは
結局TypeがmsoCalloutを返すのは、
msoShapeLineCallout1(直値:109)から
msoShapeLineCallout4BorderandAccentBar(直値:124)
の定数名に「LineCallout」を含むものです。
定数名に「Callout」を含む、
msoShapeRightArrowCallout(53)
msoShapeLeftArrowCallout(54)
msoShapeUpArrowCallout(55)
msoShapeDownArrowCallout(56)
msoShapeLeftRightArrowCallout(57)
msoShapeUpDownArrowCallout(58)
msoShapeQuadArrowCallout(59)
msoShapeRectangularCallout(105)
msoShapeRoundedRectangularCallout(106)
msoShapeOvalCallout(107)
msoShapeCloudCallout(108)
はmsoCalloutではなくmsoAutoShapeです。
最終更新日時:2018-10-27 05:08
- Newer:VBAでワークシート名とオブジェクト名を取得する
- Older:デスクトップ上のアイコンが全て消えた
Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » TypeがmsoAutoShapeではなくmsoCalloutを返すShapeを確認するExcelマクロ