ExcelVBA。最後に実行したマクロ名を文字列として記録しておいて Application.Run で再実行する。

執筆者:

カテゴリ:

,

目的

  • 最後に実行したマクロ名を文字列で記録しておく。
  • マクロ名を文字列で渡して、そのマクロを実行する。

その一例

  1. 標準モジュールに下記コードを記述しました。
    Dim 最後に実行したマクロ As String

    Sub マクロ1()
    Debug.Print "マクロ1"
    最後に実行したマクロ = "マクロ1"
    End Sub

    Sub マクロ2()
    Debug.Print "マクロ2"
    最後に実行したマクロ = "マクロ2"
    End Sub

    Sub 最後に実行したマクロを再実行()
    Application.Run 最後に実行したマクロ
    End Sub
    1. Dim 最後に実行したマクロ As String
      モジュールレベルで宣言した変数は、各 Sub から使用する事ができるようです。最後に実行したマクロを記録しておくための変数です。
      補足ですが、 Sub ~ End Sub (=プロシージャというらしいです)内で宣言した変数は、プロシージャレベルの変数となるようで、他の Sub , Function からは使用出来ないようです。
    2. Application.Run 最後に実行したマクロ
      文字列でマクロ名を渡して実行できるようです。
  2. 上記「マクロ1」を実行してみます。
    1. イミディエイトウィンドウへの出力結果です。
マクロ1
マクロ1
  • 上記「最後に実行したマクロを再実行」を実行してみます。
    1. イミディエイトウィンドウへの出力結果です。
  • 「マクロ1」が実行されたようです。
    「マクロ1」が実行されたようです。
  • 上記「マクロ2」を実行してみます。
    1. イミディエイトウィンドウへの出力結果です。
  • マクロ1
マクロ1
マクロ2
    マクロ1
    マクロ1
    マクロ2
  • 上記「最後に実行したマクロを再実行」を実行してみます。
    1. イミディエイトウィンドウへの出力結果です。
  • マクロ1
マクロ1
マクロ2
マクロ2
    マクロ1
    マクロ1
    マクロ2
    マクロ2

    マクロストック

    Sub マクロ3(引数1, 引数2, 引数3)
    Debug.Print 引数1
    Debug.Print 引数2
    Debug.Print 引数3
    End Sub

    Sub ApplicationRunメソッドで引数を渡す()
    Application.Run "マクロ3", "A", "B", "C"
    End Sub

    「ApplicationRunメソッドで引数を渡す」の実行結果は以下のようになりました。

    A,B,C
    A,B,C

    画像ストック

    ( 1 ) VBA プロジェクトの中にモジュールが一つ<br>
( 2 ) モジュールの中にプロシージャが二つ
    ( 1 ) VBA プロジェクトの中にモジュールが一つ
    ( 2 ) モジュールの中にプロシージャが二つ

    私が普段使用する事のない Static を使用したりもしてみましたが、モジュールレベルの変数宣言で目的の処理を行うことが出来ました。

    テスト環境

    • Windows 10(64 ビット)
    • Microsoft Office Excel 2003

    以上、閲覧ありがとうございました。

    広告