別のブックに保存されているプロシージャを実行

別のブックに保存されているプロシージャを実行する。

別のブックに保存されている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

 ■実行結果