【ExcelVBA】Excelのマクロから呼び出されたバッチファイルの戻り値を取得するには

この記事では、Excelのマクロから呼び出されたバッチファイルの戻り値を取得する方法についてご説明します。

【動画】Excelのマクロから呼び出されたバッチファイルの戻り値を取得する実際の動き

ツイート内の動画では、Excelのマクロから呼び出されたバッチファイルの戻り値を取得しています。

補足
ちなみに、動画内で呼び出しているバッチファイルは何をしているかというと、dirコマンドを実行しています。
VBA側から受け取った引数のディレクトリ名が存在すれば0(正常終了)を、ディレクトリ名が存在しなければ1(失敗)を返します。

Excelのマクロから引数をバッチファイルに渡して呼び出す方法

Excelのマクロから呼び出されたバッチファイルの戻り値を取得するには、次の流れの通りにコードを書いていきます。

STEP.1
呼び出すバッチファイル名の取得
呼び出すバッチファイル名を取得します。
STEP.2
バッチファイルを呼び出すのに必要なインスタンスの生成
バッチファイルを呼び出すのに必要なメソッド(Runメソッド)を使用するため、そのRunメソッドが含まれるWshShellオブジェクトからインスタンスを生成します。
STEP.3
バッチファイルに引数を指定して呼び出す
「バッチファイル名」と「バッチファイルに渡したい引数」を半角スペースでつないだ文字列をRunメソッドの引数に指定し、そのRunメソッドでバッチファイルを呼び出します。
Runメソッドとは?
Runメソッドは、外部プログラムを実行するメソッドです。
STEP.4
バッチファイル内で返却する値を取得
バッチファイル内で返却する値を取得します。

コードの例

Excelのマクロのコード(例)

Excelのマクロのコード(例)は次の通りです。

    Dim batPathFileName As String
    Dim rtnVal As Integer
        
    'WshShellオブジェクト
    Dim obj As WshShell
    
    'バッチファイル
    batPathFileName = ThisWorkbook.Path & "\exec.bat"
    
    'WshShellオブジェクトからインスタンスを生成する
    Set obj = New WshShell

    '選択されたバッチファイルをパラメタに指定して、バッチファイルを呼び出し、
    'バッチファイルからの戻り値を取得する
    rtnVal = obj.Run(batPathFileName & " " & Range("B5").Value, 1, WaitOnReturn:=True) 
    
    '戻り値の判定
    If rtnVal = 0 Then
            
        'バッチファイル内で実行されたコマンドが正常に終了した場合に行いたい処理を記述
    
    Else
    
        'バッチファイル内で実行されたコマンドが正常に終了しなかった場合に行いたい処理を記述
            
    End If   

コードの解説

まずは15行目を見てください。

15行目でRunメソッドでバッチファイルを呼び出しています。

バッチファイルを呼び出し、バッチファイル内で実行されたコマンドの終了コードを取得しています。(取得した終了コードはretVal変数に格納しています)

バッチファイルのコードも見てみましょう

先ほどExcelのマクロのコードをご説明しましたが、バッチファイルのサンプルコードもご説明します。

バッチファイルのコードの例

@echo off

rem バッチファイルの呼び出し側から受け取ったディレクトリ名に対してdirコマンド実行
dir %1

rem dirコマンドの終了コードを、バッチファイルの呼び出し側に返す
exit /b %errorlevel%
このサンプルのバッチファイルは何をしている?
このサンプルのバッチファイルは、マクロから渡されたディレクトリをdirコマンドに指定して実行しています。

コードの解説

このコードでまず見て頂きたいのは7行目です。

Exitコマンドに、コマンドの終了コードが格納されている変数「errorlevel」を指定しています。

コマンドの終了コードが格納されている変数「errorlevel」とは?
コマンドが実行されると、変数「errorlevel」にコマンドの終了コードが格納されます。
なお、0が正常、0以外の値は異常終了であることを表します。

Exitコマンドに値を指定すると、バッチファイル完了後にマクロ側にExitコマンドに指定した値がマクロに渡されます。

最後に

この記事では、Excelのマクロから呼び出されたバッチファイルの戻り値を取得する方法についてご説明しました。

バッチファイルを実行するRunメソッドの戻り値がバッチファイルからの戻り値になります。

バッチファイル側はexitコマンドに値を設定することで、バッチファイルのexitコマンド終了後にマクロ側に値がマクロに渡されます。

詳しくはExcelのマクロとバッチファイルのコードそれぞれ参考にしてみてくださいね。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら