• ベストアンサー

VBAでオートシェープのテキストを取得の際、ShapesとDrawingObjects?

エクセル2003です。 オートシェープの基本図形の「額縁」に以下のマクロを登録しました。 マクロを呼び出したオートシェープに表示してあるテキストを取得しようとするものです。 Sub test() x = Application.Caller MsgBox ActiveSheet.Shapes(x).Characters.Text End Sub ところが実行時エラーとなってしまいます。 試行錯誤の結果、ShapesをDrawingObjectsに変えるとうまくいきます。 なぜでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

Shapses(x) が テキストを含むとは限らないからでは? MsgBox ActiveSheet.Shapes(x).Name は通用します。 DrawingObjectsは互換用隠しオブジェクトですので使いたくないなら下記とか。 Sub aaa()  x = Application.Caller  MsgBox ActiveSheet.Shapes(x).Name  MsgBox ActiveSheet.Shapes(x).TextFrame.Characters.Text End Sub

shishishishi
質問者

お礼

> Shapses(x) が テキストを含むとは限らないからでは? 仰せの通りですね。理解できました。 > MsgBox ActiveSheet.Shapes(x).TextFrame.Characters.Text TextFrameを使うんですね、ありがとうございました。 うまくいきました。