目次

目的

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

目次まで戻る

その一例

  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
  3. 上記「最後に実行したマクロを再実行」を実行してみます。
    1. イミディエイトウィンドウへの出力結果です。
      「マクロ1」が実行されたようです。
      「マクロ1」が実行されたようです。
  4. 上記「マクロ2」を実行してみます。
    1. イミディエイトウィンドウへの出力結果です。
      マクロ1
マクロ1
マクロ2
      マクロ1
      マクロ1
      マクロ2
  5. 上記「最後に実行したマクロを再実行」を実行してみます。
    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

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

目次まで戻る

同じカテゴリの投稿(Excel VBA)

前後の投稿