「vba shapes.range.count」
という検索キーワードで、このサイト『インストラクターのネタ帳』へアクセスがありました。
判断に迷う検索ですが、シート上に存在している図形(Shapeオブジェクト)の個数を取得するには、どのようなコード書けばいいのか探していた方による検索ではないか、と推測しています。
マクロ記録すると「ActiveSheet.Shapes.Range」といったコードが
Excelでワークシート上の四角形を選択する操作をマクロ記録すると、
ActiveSheet.Shapes.Range(Array("Rectangle 1")).Select
といったコードが自動的に作られます。
このコードを元にした
MsgBox ActiveSheet.Shapes.Range.Count
で、アクティブシート上の図形の個数がメッセージボックスに表示されるだろうと予想して実行したところ、
実行時エラー '450': 引数の数が一致していません。または不正なプロパティを指定しています。
となってしまったのではないかと、私は想像しています。
図形の個数を取得するサンプル
図形の個数を取得するなら、以下のようなコードです。
MsgBox ActiveSheet.Shapes.Count
End Sub
Shapesオブジェクトはコレクションであり、要素である単独のShapeオブジェクトの個数を取得するためのCountプロパティが用意されています。
もしもShapes.Rangeの定義が異なっていれば
マクロ記録で自動的に作られたコード
ActiveSheet.Shapes.Range(Array("Rectangle 1")).Select
で使用されている、ShapesコレクションのRangeプロパティは、オブジェクトブラウザーの詳細ペインで確認できるとおり戻り値はShapeRangeオブジェクトです。
Shapes.Rangeプロパティに指定できる引数は「(Index)」と表示されています。「([Index])」のように[ ]で括られていませんから、引数Indexを必ず指定する必要があります。Shapes.Rangeプロパティには引数を必ず指定する必要があるため、
MsgBox ActiveSheet.Shapes.Range.Count
といったコードでは、
実行時エラー '450': 引数の数が一致していません。または不正なプロパティを指定しています。
となってしまいます。
もしも引数が、「([Index])」のように省略可能な形で、Shapes.Rangeプロパティが作られていれば、
MsgBox ActiveSheet.Shapes.Range.Count
で、実行時エラーになることもなく図形の個数を取得できただろう、と私は妄想しています。
ShapeRangeオブジェクトにもCountプロパティは用意されていますから。
最終更新日時:2021-12-30 05:52
- Newer:pandocで作成されるepubの目次タイトルを「目次」に
- Older:VBAで図形を別スライドに複製する
Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » Shapes.Range.Countで図形の個数は取得できない??