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 ・・・新着記事一覧を見る

シートコピー後のアクティブシートは何か|ツイッター出題回答 (2023-09-19)
Excel関数の引数を省略した場合について|ツイッター出題回答 (2023-09-14)
セル個数を返すRange.CountLargeプロパティとは|VBA技術解説(2023-09-08)
記号を繰り返してグラフ作成(10単位で折り返す)|ツイッター出題回答 (2023-08-28)
シートを削除:不定数のシート名に対応|VBAサンプル集(2023-08-24)
ランクによりボイントを付ける(同順位はポイントを分割)|ツイッター出題回答 (2023-08-22)
OneDrive使用時のThisWorkbook.Pathの扱い方|VBA技術解説(2023-07-26)
列幅不足による###表示や指数表示を判定する|VBA技術解説(2023-07-12)
シートを削除:不定数のシート名に対応|VBAサンプル集(2023-07-04)
シート関数のCOUNTIFS,SUMIFS,MAXIFSと同じ処理|Power Query(M言語)入門(2023-02-28)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.マクロとは?VBAとは?VBAでできること|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
10.条件分岐(IF)|VBA入門




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

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



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