マクロ(Excel VBA)で押されたボタンによって処理を変えたいと思ったことはありませんか?
Applicationオブジェクトの「Application.Caller」を使うことで、どのボタンが押されたのか判断できるようになります!
今回はサンプルとして押されたボタンの名前、文字を判定するソースを紹介します。
Application.Caller
ボタン(フォームコントロール)でマクロを動かします。
サンプルとして「新規」、「更新」の2種類のボタンを配置して作成したマクロを登録。

ボタン名で判定

設定したボタンを右クリックしてボタンの名前を確認します。
ここでは「新規」がボタン 1、「更新」がボタン 2と設定されています。


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub ボタン名を判定() Dim Button_Name As String '押されたボタンを判定 Button_Name = Application.Caller If Button_Name = "ボタン 1" Then MsgBox "ボタン 1が押されました。" ElseIf Button_Name = "ボタン 2" Then MsgBox "ボタン 2が押されました。" End If End Sub |
ボタンの名称で判定
次はボタンに記載されている文字を判定する方法です。
「Button_Text = Worksheets(1).Buttons(Application.Caller).Text」でボタンの文字を取得できるので、ボタンの名称が確定している場合は、こちらの方が使いやすいかもしれませんね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub ボタンの文字を判定() Dim Button_Text As String '押されたボタンの文字を判定 Button_Text = Worksheets(1).Buttons(Application.Caller).Text If Button_Text = "新規" Then MsgBox "新規ボタンが押されました。" ElseIf Button_Text = "更新" Then MsgBox "更新ボタンが押されました。" End If End Sub |


まとめ
今回は「Application.Caller」の使い方について解説を行いました。
どのボタンを押したのか判定できるようになると、同じ処理をまとめることができるのでコードも見やすくなりますね。