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

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
公開日:2015-01-08 最終更新日: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サンプル集」の記事

指定セルに名前定義されているか判定する

・指定セル範囲が何らかの名前定義に含まれているか ・指定セル範囲と同一範囲の名前定義があるか ・すでに設定されている名前定義を削除してから再設定 ・マクロVBAでの名前定義について
Excel2003(xls)を2007以降(xlsx,xlsm)に変換する(HasVBProject)
Excel2003形式(xls)のファイルを、一括でExcel2007以降形式(xlsx,xlsm)に変換するマクロVBAサンプルコードです。サンプルコードでは、サブフォルダ「Excelファイル」にあるxlsを、マクロ無しならxlsx、マクロ有りならxlsmにして保存しています。
ハイパーリンクからファイルのフルパスを取得する
ハイパーリンクのリンク先ファイル情報を取得しようとすると、なかなか難しいことになります、ハイパーリンクからパスを取得すると相対パスとなり、簡単にはファイル情報を取得出来ません。以下のサンプルでは、ハイパーリンクの設定されているセルの右隣のセルに更新日時を出力しています。
ボタンに表示されているテキストを取得(Application.Caller)
Excelの表をPowerPointへ図として貼り付け
・Excelの表をPowerPointへ図として貼り付けるVBA ・Excelの表をPowerPointへ図として貼り付けるVBAの解説 ・グラフをPowerPointへ貼り付け ・既にパワーポイントを開いている場合
VBAで表やグラフをPowerPointへ貼り付ける
・表やグラフをPowerPointへ貼り付けるVBA ・PowerPointを使う準備と保存終了 ・表(セル範囲)をPowerPointへ貼り付けるVBAの解説 ・グラフをPowerPointへ貼り付けるVBAの解説 ・貼り付け時のエラー対応 ・既にパワーポイントを開いている場合
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除
VBAでフォルダを削除するにはRmDirステートメントを使いますが、サブフォルダやファイルが入っている場合は、RmDirはエラーとなります。そこで、サブフォルダやファイルがある場合は、FileSystemObjectを使います。以下のサンプル使用時には、「ツール」→「参照設定」で、「MicrosoftScripti…
Shift_JISのテキストファイルをUTF-8に一括変換
本サイトの文字コードは開設当初からShift_JISでしたが、昨今の事情を考えてUTF-8に変更することにしました。そこで既存記事全てを一括で変換することになり、これをVBAでやりましたので、その時のマクロVBAコードを掲載しておきます。以下のVBAコードはサイトのUTF-8変更にあたり急遽作成したものですが、
VBAコードの全プロシージャー・プロパティ一覧を取得
・セキュリティについて ・VBAコードの全プロシージャー・プロパティ一覧を取得するVBAコード ・使用する場合のVBAサンプル
数式バーの高さを数式の行数で自動設定
数式バーの高さは、操作で変更しない限り一定の高さのままになっています。通常は1行表示になっている場合が多いと思いますが、その場合、セル内で改行されていると最初の1行しか見ることができません。値の場合はセルに表示されているのであまり問題ありませんが、数式の場合はセル編集にしないと数式の全部を見ることができません。
図形オートシェイプ(Shape)の複数選択
・ワークシートの全てのShapeを選択する場合 ・ShapeオブジェクトのSelectメソッド ・ShapeRangeオブジェクト ・シート内の指定名称の図形を選択


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

ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)


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

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




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


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



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