別のブックに保存されているプロシージャを実行する。
別のブックに保存されているVBAのプロシージャを実行するにはApplication.Runメソッドを利用することで実行できます。
引数に “ブック名!プロシージャ名” を指定することで外部のプロシージャを実行できます。
外部のプロシージャに引数があるい場合はRunメソッドの第2引数以降に設定ていきます。この引数の設定は最大で30個まで設定できます。
サンプルコードには上部に呼び出し元のプロシージャ、下部に呼び出される側(異なるブック)に保存されているプロシージャを記載しています。
●呼び出し元のブックのプロシージャ
'******************************************************************
' 別ブックのプロシージャを実行
'******************************************************************
Sub runOtherBookProc()
Debug.Print "呼び出す側のブック:" & ThisWorkbook.Name
'プロシージャを実行したい外部ブックを開く
Dim wbObj As Object
Set wbObj = Workbooks.Open("C:\VBA\テスト実行.xlsm")
'他ブックのプロシージャ(Sub)を実行
Call Application.Run("テスト実行.xlsm!calledSub")
'他ブックのプロシージャ(Sub)を引数ありで実行
Call Application.Run("テスト実行.xlsm!calledSub_WithArgu", "他ブックのVBAを実行", Now())
'他ブックのプロシージャ(Function)実行し、戻り値を取得
Dim rtnStr As String
rtnStr = Application.Run("テスト実行.xlsm!calledFunc")
Debug.Print "戻り値 : " & rtnStr
'ブックを閉じる
wbObj.Close
End Sub ●呼び出される別ブックのプロシージャ
(ファイルパス:C:\VBA\テスト実行.xlsm)
'******************************************************************
' プロシージャの種類名を取得
'******************************************************************
Sub calledSub()
Debug.Print "----------------------------------------"
Debug.Print ThisWorkbook.Name & "のVBAを実行"
End Sub
'******************************************************************
' プロシージャの種類名を取得
'------------------------------------------------------------------
' 第1引数:文字列
' 第2引数:文字列
'******************************************************************
Sub calledSub_WithArgu(getStr1 As String, getStr2 As Date)
Debug.Print "----------------------------------------"
Debug.Print ThisWorkbook.Name
Debug.Print "第1引数:" & getStr1 & vbCrLf & "第2引数:" & getStr2
End Sub
'******************************************************************
' プロシージャの種類名を取得
'------------------------------------------------------------------
' 戻り値 :文字列
'******************************************************************
Function calledFunc() As String
Debug.Print "----------------------------------------"
Debug.Print ThisWorkbook.Name
calledFunc = "他ブックで実行されたFunctionの戻り値"
End Function■実行結果



