|
フォームツールバーのオブジェクトを利用するなら、登録したマクロを呼び出したとき
Callerプロパティに「そのマクロを登録しているオブジェクトの名前(Name)」を取得
することが出来ます。オブジェクトの名前は、数式バーを開いてオブジェクトを選択
すると、バーの左端の窓に出てきます。(既に何らかのマクロが登録されているなら、
[Ctrl]キーを押しながらマウスで選択します。)まずボタンを一つずつ押して、名前を
メモしておきます。次に・・
Sub Set_Action()
ActiveSheet.Buttons.OnAction = "MyAction"
End Sub
Sub MyAction()
Dim x As Variant
x = Application.Caller
If VarType(x) <> 8 Then Exit Sub
MsgBox x & " がクリックされました", 64
End Sub
を標準モジュールに入れ、Set_Action を一回だけ実行してから、任意のボタンを
押してみて下さい。押したボタンによって異なった名前がメッセージされることを
確認し、先ほど採ったメモを見ながら MyAction のコードを
Sub MyAction()
Dim x As Variant
x = Application.Caller
If VarType(x) <> 8 Then Exit Sub
Select Case x
Case "ボタン 11"
'ボタン 11が押されたときの処理
Case "ボタン13"
'ボタン 13が押されたときの処理
Case ・・・
End Select
End Sub
というように変更すれば、一つのマクロで複数のボタンに対応する複数の処理が
出来るようになります。
なお「ツール」「マクロ」・・で、リストから MyAction を選んで実行した場合、
Callerプロパティの値のデータ型は文字列になりません。それで"ボタンを押して
実行されたのではない"ということが分かるので、冒頭でVarType関数を使って
データ型を調べているわけです。
|
|