Mam's WebSite
建築CGパース住宅CGパース

Mamの覚書Q&A検索

トップページMamの覚書Q&A検索Excel(VBA)⇒Q&A


大項目:「 Excel 」 - 中項目:「 VBA 」

「 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できちんと表示されます。


Mam's WebSite