VBAサンプル集
ボタンに表示されているテキストを取得(Application.Caller)

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
最終更新日:2021-01-29

ボタンに表示されているテキストを取得(Application.Caller)

メニューのシートを作成して、ボタンを配置、そしてボタンにより指定シートに移動する。
よくありますが、ボタン一つずつに別々(移動先のシート毎に)のマクロを作成するのは面倒です、
そこで、
一つのマクロで済ませる方法の紹介です。



Application.Caller

Application.Callerは、VBAを呼び出した方法についての情報を返します。
ボタンから呼ばれた時は、そのボタン名がString型で返されます。
ユーザー定義関数として呼ばれた場合は、数式を入れたセルがRangeオブジェクトで渡されます。



Sub sample()
  Select Case TypeName(Application.Caller)
    Case "String"
      'ボタンから呼ばれた
    Case "Range"
      Debug.Print "ユーザー定義関数として呼ばれた"
      Exit Sub
    Case Else
      Debug.Print "不明な呼ばれ方"
      Exit Sub
  End Select
  On Error Resume Next
  Sheets(ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text).Select
  If Err Then
    MsgBox "ボタン表示のシートがありません。"
  End If
End Sub

このマクロVBAなら、どのボタンでもボタンのテキストと同一のシートに移動出来ます。

Application.Caller
これで、クリックされたボタンを特定しています。

ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text
これで、クリックされたボタンのテキストを取得しています。

後は、SheetsのSelectだけです。

注意点としては、
ボタンのテキストと同一のシートが存在しない場合はエラーとなります。
もっとも、最初に作るときだけしか発生しないエラーではありますが。


メニューのシートを作成するときは、とても便利なはずです。
ぜひ使ってみてください。

ボタンからプロシージャーに引数を渡す

上では、ボタンに表示されている文字列で分岐させましたが、
ボタンへ登録する時に、引数を指定することもできます。

'プロシージャー名 "引数"'
'sample2 "Sheet2"'

このように、'(シングルクォート)で囲みその中に渡す引数を指定します。

プロシージャーがPrivateの場合は、モジュール名で修飾してください。

'モジュール名.プロシージャー名 "引数"'
'Module1.sample2 "Sheet2"'


マクロ VBA 押されたボタンを取得

Private Sub sample2(ByVal arg)
  On Error Resume Next
  Sheets(arg).Select
  If Err Then
    MsgBox "ボタン表示のシートがありません。"
  End If
End Sub





同じテーマ「マクロVBAサンプル集」の記事

指定セルに名前定義されているか判定する
Excel2003(xls)を2007以降(xlsx,xlsm)に変換する(HasVBProject)
ハイパーリンクからファイルのフルパスを取得する
ボタンに表示されているテキストを取得(Application.Caller)
Excelの表をPowerPointへ図として貼り付け
VBAで表やグラフをPowerPointへ貼り付ける
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除
Shift_JISのテキストファイルをUTF-8に一括変換
VBAコードの全プロシージャー・プロパティ一覧を取得
数式バーの高さを数式の行数で自動設定
図形オートシェイプ(Shape)の複数選択


新着記事NEW ・・・新着記事一覧を見る

VBA100本ノック 99本目:自動席替え(行列と前後左右が全て違うように)|VBA練習問題(3月2日)
VBA100本ノック 98本目:席替えルールが守られているか確認|VBA練習問題(3月1日)
VBA100本ノック 97本目:Accessからデータを取得2|VBA練習問題(2月27日)
VBA100本ノック 96本目:Accessからデータを取得1|VBA練習問題(2月26日)
VBA100本ノック 95本目:図形のテキストを検索するフォーム作成|VBA練習問題(2月24日)
VBA100本ノック 94本目:表範囲からHTMLのtableタグを作成|VBA練習問題(2月23日)
VBA100本ノック 93本目:複数ブックを連結して再分割|VBA練習問題(2月22日)
VBA100本ノック 92本目:セルの色を16進で返す関数|VBA練習問題(2月20日)
VBA100本ノック 91本目:時間計算(残業時間の月間合計)|VBA練習問題(2月19日)
VBA100本ノック 90本目:セルに重なっている画像の削除|VBA練習問題(2月17日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.マクロはどこに書くの(VBEの起動)|VBA入門
10.とにかく書いてみよう(Sub,End Sub)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ