Callに関する諸注意
(1)同一モジュール内のプロシージャだけでなく、以下のように違うモジュールのプロシージャも呼べるらしい。(※次の(2)のパターンに注意)
Module1
Sub Sample1()
Call TestProc '「テスト」のメッセージボックスが呼び出される
End Sub
Module2
Sub TestProc()
MsgBox "テスト"
End Sub
(2)違うモジュールにある同名のモジュールをCallで呼び出したいときは以下のようにプロシージャ名の前に「モジュール名.」を付けて呼び出す
「モジュール名.」がない場合、Callを使っている側の方がCallによって優先的に呼び出される
⇒下記のModule1において「Module2.」を消した場合、「サンプル」のダイアログボックスが表示される
Module1
Sub Sample1()
Call Module2.TestProc 'Module2があることで呼び出されるのは「テスト」のメッセージボックス
End Sub 'Module2がない場合、呼び出されるのは「サンプル」のメッセージボックス
Sub TestProc()
MsgBox "サンプル"
End Sub
Module2
Sub TestProc()
MsgBox "テスト"
End Sub
異なるブックにあるモジュール内のプロシージャの呼び出し
Callは使わず以下の手順をたどり、最終的にRunメソッドを使って呼び出す
(1)Openメソッドで対象のモジュールをもつブックを開ける
(2)以下の書式に従って呼び出す。
Application.Run "ブック名.xlsm!プロシージャ名"
結果として、以下のようなかんじになる
Sub sample()
Workbooks.Open "C:\test\sample2.xlsm"
Application.Run "sample2.xlsm!hogehoge"
End Sub 'あらかじめ、hogehogeプロシージャはsample2.xlsmに記載し、上のパスの場所に格納
主な参考資料

