「マクロ DrawingObject.Characters.Text」
という検索キーワードでのアクセスに気が付きました。
RectangleやOvalなどのレガシーなオブジェクトを使って、図形に入力されている文字列を取得するコードについて調べていた方による検索です。
このキーワードだけでは何を探していらしたのかまったくわかりませんが、一つお伝えしたいことがあります。
もしもRectangleやOvalなどに入力されている文字列を取得するためだけにCharactersオブジェクトを使っていたのならば、
その必要はないということです。
DrawingObjectsから文字列を取得するサンプル
アクティブなシートに、四角形や楕円に文字列を入力した状態で、以下のSubプロシージャを実行してみてください。
Dim obj As Object
For Each obj In ActiveSheet.DrawingObjects
Debug.Print obj.Text
Next
End Sub
図形に入力されている文字列が、イミディエイトウィンドウに出力されるはずです。
DrawingObject系オブジェクトはTextプロパティを持つ
オブジェクトブラウザーで[非表示のメンバーを表示]オプションをOnにした状態で、RectangleオブジェクトやOvalオブジェクトを確認すると、下図のとおりTextプロパティが存在していることを確認できます。
このTextプロパティを使えば、わざわざCharactersオブジェクトを介してTextプロパティを取得する必要はありません。
基本的にはShapeオブジェクトを使いましょう
なお、RectangleやOvalなどのレガシーなオブジェクトは、Excel VBAを熟知している方が自分一人で使うのはOKですが、組織で複数の人がExcel VBAをメンテナンスする場合、本当にレガシーなDrawingObject系オブジェクト使う必要があるのか、事前にしっかりと検討しましょう。
基本的には、Shapeオブジェクト下のTextFrameオブジェクトまたはTextFrame2オブジェクトの利用をおすすめします。
TextFrameオブジェクトを利用する場合は以下のようなコードで、
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
Debug.Print shp.TextFrame.Characters.Text
Next
End Sub
TextFrame2オブジェクトを利用する場合は以下のようなコードです。
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
Debug.Print shp.TextFrame2.TextRange.Text
Next
End Sub
Home » エクセルマクロ・Excel VBAの使い方 » DrawingObjects » RectangleやOvalなどから文字列を取得する