【Excel VBA】実行中のマクロから別のマクロを実行する方法を紹介【備忘録】

Excel
スポンサーリンク

今回は実行中のマクロから別のマクロを実行する方法を紹介したいと思います。

過去にVBAに関する記事を投稿していますので、是非こちらも併せてご覧ください!

スポンサーリンク

別マクロを呼び出す方法

実行中のマクロから別のマクロを実行するにはCallステートメントを使います。

Sub main()
    'openMsgBoxを呼び出し
    Call openMsgBox
End Sub

Sub openMsgBox()
    '実行した時刻を表示する
    MsgBox Now
End Sub

書き方は簡単で、Callの後に半角スペースを入れ、実行したいマクロ(プロシージャ)名を書くだけです。今回の場合だとopenMsgBoxを実行したいので、「Call openMsgBox」としています。

ちなみに実行すると、実行した時刻がメッセージボックスに表示されます。

別マクロを呼び出す方法_1

別モジュールのマクロを実行する

同じモジュール内でしか呼び出すことが出来ないわけではなく、別のモジュールに書いたマクロを呼び出すこともできます。

最初と同様に、実行したいマクロ(プロシージャ)名を書くだけです。

'Module1
Sub main()
    'openMsgBoxを呼び出し
    Call openMsgBox
End Sub
'Module2
Sub openMsgBox()
    MsgBox Now
End Sub
別マクロを呼び出す方法_別モジュールのマクロを実行する_1

ちなみにマクロ名を入力する前に「モジュール名.(ドット)」と入力すると、そのモジュール内のマクロが一覧で表示されるので、その中から選択することもできます。

別マクロを呼び出す方法_別モジュールのマクロを実行する_2

私は別モジュールのマクロを呼び出す場合、「モジュール名.マクロ名」で記述するようにしています。

'Module1
Sub main()
    'Module2のopenMsgBoxを呼び出し
    Call Module2.openMsgBox
End Sub

こちらの方がどのモジュールのマクロを実行しているかが分かるのでおすすめです。

「名前が適切ではありません」とエラーが出る場合

別モジュールのマクロを実行時に「名前が適切ではありません」とエラーが出る場合があります。

原因をざっくり言うと、別モジュールに同じ名前のマクロが複数ある可能性があります

別マクロを呼び出す方法_「名前が適切ではありません」とエラーが出る場合_1

このエラーがが出た場合、同じマクロ名のものがないか確認し、同じものがあれば変えておきましょう

一応、モジュール名を付けておけば実行できないこともないですが、基本的にはマクロ名を変えておくことをお勧めします!

スポンサーリンク

Callステートメント無しでも呼び出せる

実は、Callステートメントを記述しなくても別マクロを実行することが出来ます。先程と同じように実行したいマクロ(プロシージャ)名を書くだけです。

Sub main()
    'openMsgBoxを呼び出し
    openMsgBox
End Sub

Sub openMsgBox()
    MsgBox Now
End Sub
別マクロを呼び出す方法_Callステートメント無しでも呼び出せる_1

ですが、ぱっと見た時に分かりにくいので、個人的にはあまりお勧めしません。。。

基本的には「Call マクロ名」で記述するようにしましょう!

スポンサーリンク

別モジュールから呼び出せないようにしたい場合

別モジュールから呼び出せないようにしたい場合は、Subの前にPrivateを付けるとできます。

'Module2
Private Sub openMsgBox()
    MsgBox Now
End Sub

Privateを付けると、同一モジュール内からでしかマクロが呼び出せなくなります。別モジュールから呼び出そうとすると「SubまたはFunctionが定義されていません。」とエラーが表示されます。

別マクロを呼び出す方法_別モジュールから呼び出せないようにしたい場合_1

まとめ

今回は実行中のマクロから別のマクロを実行する方法を紹介しました。

もしマクロ呼び出し時にエラーが出る場合は、

  • 別モジュールに同じ名前のマクロが複数ないか
  • 呼び出したいマクロにPrivateが付いていないか

上記2点を確認してみましょう!

コメント

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