トップへ(mam-mam.net/)

Excelシートにフォームのボタン配置して、同じSubプロシージャを動かすが、どのボタンをクリックしたか判別

検索:

「Excelシートにフォームのボタン配置して、同じSubプロシージャを動かすが、どのボタンをクリックしたか判別」

Excelシートにフォームのボタン配置して、同じSubプロシージャを動かすが、どのボタンをクリックしたか判別したい。
こうするとボタンごとにSubプロシージャを作成しなくてすみ、メンテナンスが楽だから。どうすればよいか。

回答

Subプロシージャの呼び出し元は
Application.Caller
を調べればわかります。
Application.Callerは、Rangeオブジェクト以外にString型も入ってきます。
Excelシート上に配置したフォームのボタンはString型になります。

ソース

まず、以下のプロシージャを新規のModuleを作成して入れます。

Sub button_test()
  If TypeName(Application.Caller) = "String" Then
    If Application.Caller = "ボタン 1" Then
      MsgBox "ボタン1を押した"
    ElseIf Application.Caller = "ボタン 2" Then
      MsgBox "ボタン2を押した"
    End If
  End If
End Sub

次に、シートにフォームのボタン(表示⇒ツールバー⇒フォーム で表示し、ボタンをクリック)をおきます。
「ボタン 1」が生成されますが、上記の「button_test」をマクロ登録します。
更にもう1つ「ボタン 2」を作成し、同じく上記「button_test」をマクロ登録します。
ボタンを押すと、ボタン1、ボタン2できちんと表示されます。