Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » TypeがmsoAutoShapeではなくmsoCalloutを返すShapeを確認するExcelマクロ

TypeがmsoAutoShapeではなくmsoCalloutを返すShapeを確認するExcelマクロ

動作検証バージョン:Windows版Excel(バージョン1809 ビルド10827.20138)

コレクションには単独のオブジェクトを追加するためのAddメソッドが用意されていることが多いのですけれど、Shapesコレクションの場合には「Add〇〇」といった名前のメソッドがたくさん用意されています。

そのひとつAddShapeメソッドを使うと、

[挿入]タブ-[図形]ボタンの、[四角形]以下に表示される図形を、

挿入できます。

[スポンサードリンク]

Shapes.AddShapeで挿入された全ShapeがmsoAutoShapeではない

このShapes.AddShapeメソッドで挿入されたShapeのTypeプロパティが、必ずmsoAutoShape(直値:1)を返してくれればいいのですが、一部はmsoCallout(直値:2)を返します。

また、定数名に「Callout」を含むものを指定した場合に、すべてがmsoCalloutを返すというわけでもありません。

TypeがmsoCalloutを返すShapeを確認するサンプルマクロ

そこで、TypeプロパティがmsoCalloutを返すShapeを確認するためのマクロを作ってみました。

Sub 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

  End With
 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

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » TypeがmsoAutoShapeではなくmsoCalloutを返すShapeを確認するExcelマクロ

「Shapesコレクション・Shapeオブジェクト」の記事一覧

検索


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

.