【Excel VBA】Application.Runを使ってマクロを呼び出す方法を紹介【備忘録】

Excel
スポンサーリンク

今回はApplication.Runを使ってマクロを呼び出して実行する方法を備忘録も兼ねて残しておきたいと思います。

スポンサーリンク

マクロを呼び出して実行する方法

実行する環境

まず初めに実行する環境について紹介しておきます。

使用するのは呼び出し元のファイル呼び出し先のマクロが入っているファイルの2つになります。
今回test_ApplicationRun.xlsmというマクロブックからmsg_haribona.xlamharibona_xlam_testプロシージャを呼び出す、というのをやってみたいと思います。

マクロを呼び出して実行する方法_実行する環境_1

なお、呼び出し元のファイルと呼び出し先のマクロが入っているファイルが同じ階層にある状態で説明していきます。

マクロを呼び出して実行する方法_実行する環境_2

xlamについては以下記事で紹介していますので、よければこちらもご覧ください!

コードの紹介

それではコードを紹介します。
なお、コードは呼び出し元のファイルに記述してください
ワークシートでも標準モジュールでもどちらでもOKです

'マクロの実行【xlamの場合】
Sub test_ApplicationRun_xlam()
    
    Dim targetAppFullName       As String
    Dim targetAppFileName       As String
    Dim targetAppMacroName      As String
    
    '呼び出し先のファイル名
    targetAppFileName = "msg_haribona.xlam"
    
    '呼び出し先のファイルに入っているマクロ名
    targetAppMacroName = "haribona_xlam_test"
    
    'パスとファイル名とマクロ名を指定の形にする
    targetAppFullName = "'" & ThisWorkbook.Path & "\" & targetAppFileName & "'" & _
                        "!" & targetAppMacroName
    
    'マクロを呼び出して実行する
    Application.Run targetAppFullName
    
End Sub

実行するとmsg_haribona.xlamharibona_xlam_testが呼び出せているのが分かると思います。

マクロを呼び出して実行する方法_コードの紹介_1

コードの説明

次にコードの説明をします。

とは言っても、targetAppFileNametargetAppMacroNameはそれぞれファイル・マクロ名を格納しているだけなのでさして問題ではありません。

'呼び出し先のファイル名
targetAppFileName = "msg_haribona.xlam"
    
'呼び出し先のファイルに入っているマクロ名
targetAppMacroName = "haribona_xlam_test"

ですがtargetAppFullNameに格納する処理は若干複雑なので、こちらに焦点を当てて説明したいと思います。

'パスとファイル名とマクロ名を指定の形にする
targetAppFullName = "'" & ThisWorkbook.Path & "\" & targetAppFileName & "'" & _
                    "!" & targetAppMacroName

targetAppFullNameはコメントにもある通り、呼び出し先のファイルが格納されているパスとファイル・マクロ名を格納する為の変数になっています。

ですが、ただパスとファイル・マクロ名を記述すればいいわけではなく、指定された形にしなければ上手く動いてくれません

じゃあ指定の形って何???

となる方もいると思います。

指定の形とは、「‘【呼び出し先のファイルパス】’!【呼び出し先のマクロ名】」になります。
言語化すると、

  1. 呼び出し先のファイルパスを”(シングルクォーテーション:半角)」で囲む
  2. 「!(びっくりマーク:半角)」を入力し、後ろに呼び出し先のマクロ名を指定する。

といった感じになります。
今回の場合の変数を展開してみると以下のようになります。
(パスの部分は省略)

'パスとファイル名とマクロ名を指定の形にする:展開後
targetAppFullName = "'" targetAppFileName & "'" & "!" & targetAppMacroName
                  = "'msg_haribona.xlam'!haribona_xlam_test"

・・・とこんな感じでファイル名とマクロ名を区切っておく必要があるわけです。
慣れるまでは大変ですが、これを守らないとマクロが呼び出せなくなっちゃうので注意してください

指定の形にできたら、あとはApplication.Runで呼び出してあげればOKです。

'マクロを呼び出して実行する
Application.Run targetAppFullName

別のマクロブック内のマクロも実行できる

今回は例としてxlam形式のファイルの場合の呼び出し方を紹介しましたが、xlsm形式(マクロブック)に含まれているマクロを呼び出すことも可能です

例としてtest_ApplicationRun.xlsmからmsg_getLastRow.xlsmtest_LastRowプロシージャを呼び出す、というのをやってみたいと思います。

マクロを呼び出して実行する方法_別のマクロブック内のマクロも実行できる_1

呼び出し元のファイル(test_ApplicationRun.xlsm)に記述するコードは以下の通りです。

'マクロの実行【xlsmの場合】
Sub test_ApplicationRun_xlsm()

    Dim targetAppFullName       As String
    Dim targetAppFileName       As String
    Dim targetAppMacroName      As String
    
    '呼び出し先のファイル名
    targetAppFileName = "msg_getLastRow.xlsm"
    
    '呼び出し先のファイルに入っているマクロ名
    targetAppMacroName = "test_LastRow"
    
    'パスとファイル名とマクロ名を指定の形にする
    targetAppFullName = "'" & ThisWorkbook.Path & "\" & targetAppFileName & "'" & _
                        "!" & targetAppMacroName
    
    'マクロを呼び出して実行する
    Application.Run targetAppFullName
    
End Sub

次に呼び出し先のファイル(msg_getLastRow.xlsm)のコードは以下の通りです。

'最終行の取得
Sub test_LastRow()
    
    Dim lastRow                 As Long
    
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    MsgBox lastRow
    
End Sub

こちらのコードについては以下記事で紹介していますので、よければこちらもご覧ください!

実行すると呼び出し先のファイル(msg_getLastRow.xlsm)が開かれ、呼び出し元ファイルの最終行を取得し、メッセージボックスが表示されます

マクロを呼び出して実行する方法_別のマクロブック内のマクロも実行できる_2

こんな感じでマクロブックから別のマクロブック内のマクロを呼び出すこともできちゃいます。

スポンサーリンク

まとめ

今回はApplication.Runを使ってマクロを呼び出して実行する方法を紹介しました。

ファイル毎にマクロを分割しているときなどに役立つので、是非覚えておきましょう!

また、このブログではVBAに関する記事を不定期で投稿していますので、是非ご覧ください!

コメント

タイトルとURLをコピーしました