プロが教える店舗&オフィスのセキュリティ対策術

エクセル2003です。

オートシェープの基本図形の「額縁」に以下のマクロを登録しました。
マクロを呼び出したオートシェープに表示してあるテキストを取得しようとするものです。

Sub test()
x = Application.Caller
MsgBox ActiveSheet.Shapes(x).Characters.Text
End Sub

ところが実行時エラーとなってしまいます。
試行錯誤の結果、ShapesをDrawingObjectsに変えるとうまくいきます。
なぜでしょうか?

A 回答 (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
    • good
    • 0
この回答へのお礼

> Shapses(x) が テキストを含むとは限らないからでは?

仰せの通りですね。理解できました。

> MsgBox ActiveSheet.Shapes(x).TextFrame.Characters.Text

TextFrameを使うんですね、ありがとうございました。
うまくいきました。

お礼日時:2005/01/15 17:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!