Excel VBAの
「WorksheetクラスのDrawingObjectsプロパティを取得できません。」
というエラーについて調べる方は少なくないようです。
Worksheetオブジェクト等に用意されているDrawingObjectsメソッドで取得できる、
DrawingObjectsコレクションに関係するエラーメッセージです。
DrawingObjects系のオブジェクトとは
まず、DrawingObjects系のオブジェクトについて知っておいてください。
Worksheet.DrawingObjectsメソッド等を使って取得できるDrawingObjectsコレクションや、その要素である各種オブジェクトを使って、シート上に存在する図形等を操作することができます。
しかし、これらDrawingObjects系のオブジェクトは現在では非表示に設定されている、古いオブジェクトです。
最近は、拙著『理解するExcel VBA/図形操作の基本』で解説しているShapesコレクションやShapeオブジェクト、ShapeRangeオブジェクトを使うのが基本です。
最近といっても、もう25年以上経過しているわけですが……
基本であるShapes/Shape/ShapeRangeについて理解している方が、コードをシンプルにするために使うために使うのが、DrawingObjects系のオブジェクトだということを知っておいてください。
「WorksheetクラスのDrawingObjectsプロパティを取得できません。」エラーになる原因
上記の内容をふまえて、、
「WorksheetクラスのDrawingObjectsプロパティを取得できません。」
エラーになる可能性はいくつかあるのでしょうが、DrawingObjectsコレクションの要素オブジェクトを取得できない場合に発生するのが基本です。
実例を見ましょう。
何らかの図形をアクティブシート上に作成してから、以下のExcelマクロを実行すると「WorksheetクラスのDrawingObjectsプロパティを取得できません。」エラーになります。
Dim obj As Object
Set obj = ActiveSheet.DrawingObjects("hogehoge")
obj.Select
End Sub
作成した図形の名前を「hogehoge」に変更した場合にはエラーが発生せず、名前を「hogehoge」に変更した図形が選択されます。
Worksheet.Shapesプロパティで書くと
DrawingObjectsメッソッドを使わないで、Worksheet.Shapesプロパティを使って上記と同様の処理を行うコードを書くと、以下のとおりです。
Dim shp As Shape Set shp = ActiveSheet.Shapes("hogehoge") shp.Select
この場合、アクティブシートに「hogehoge」という名前の図形がなければ
「指定した名前のアイテムが見つかりませんでした。」
実行時エラーが発生します。
これに相当するのが、
「WorksheetクラスのDrawingObjectsプロパティを取得できません。」
です。
- Newer:Word VBAで表にカーソルを移動する
- Older:VBAでExcelにCONCAT関数を入力する
Home » エクセルマクロ・Excel VBAの使い方 » DrawingObjects » 「WorksheetクラスのDrawingObjectsプロパティを取得できません。」とは