|
以下のコードをボタンに登録し対象ボタンをクリックしてみてください。
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で調べてください。
|
|