| 
    
     |  | 以下のコードをボタンに登録し対象ボタンをクリックしてみてください。 
 
 Sub btnClick()
 If TypeName(Application.Caller) = "String" Then
 MsgBox ActiveSheet.Buttons(Application.Caller).Caption
 MsgBox ActiveSheet.Buttons(Application.Caller).Text
 MsgBox ActiveSheet.Shapes(Application.Caller). _
 TextFrame.Characters.Text
 MsgBox ActiveSheet.Shapes(Application.Caller).OLEFormat.Object.Caption
 MsgBox ActiveSheet.Shapes(Application.Caller).OLEFormat.Object.Text
 MsgBox ActiveSheet.Shapes(Application.Caller).DrawingObject.Caption
 MsgBox ActiveSheet.Shapes(Application.Caller).DrawingObject.Text
 End If
 End Sub
 7つの記述全てが対象のボタンに表示されている文字列を表しています。
 
 よって、提示されたコードの
 
 BTN = ActiveSheet.Shapes(Application.Caller). _
 TextFrame.Characters.Text
 Sheets(BTN).Select
 
 
 この箇所は、
 
 BTN = ActiveSheet.Buttons(Application.Caller).Caption
 Sheets(BTN).Select
 
 としても同じです。
 
 一つのデータを取得するのに複数の記述方法がある場合があります。
 
 
 >BTN = ActiveSheet.Shapes(Application.Caller). _
 >    TextFrame.Characters.Text
 >の意味を知りたくて、質問にしました。
 Excel95以前は、
 ボタンを扱う場合は、ActiveSheet.Buttons というオブジェクトを通して
 ボタンの操作を行ってきました。
 
 Excel97以降に新しくShapeという図形全体を表すオブジェクトが登場し、
 このShapeオブジェクトのプロパティを取得していくことで
 全ての図形(コントロールを含めて)の操作が可能になりました
 
 Shapeオブジェクトの登場で機能も新しく追加された(様々な設定できめ細かい指定が可能)のですが、
 
 使いにくい点もあります。
 ActiveSheet.Shapes(Application.Caller). _
 TextFrame.Characters.Text
 
 ActiveSheet.Buttons(Application.Caller).Caption
 
 ボタンにある文字列を取得するのに記述がShapeは長いよね!!
 
 
 実際には、旧オブジェクトとShapeをTPOによって、使い分けることが良いと思います。
 どのように使い分けるかは、経験です。
 
 TextFrameは、文字列を含んだ図形の表示レイアウトに関する情報・設定が
 行えるオブジェクトですが、詳細は、Helpで調べてください。
 
 |  |