この記事では、Excelのマクロから呼び出されたバッチファイルの戻り値を取得する方法についてご説明します。
【動画】Excelのマクロから呼び出されたバッチファイルの戻り値を取得する実際の動き
マクロから呼び出したバッチファイルの戻り値を取得する処理を作ってみました😄
戻り値と言っても数値しか取れないんですけどね💦
動画では、マクロが呼び出したバッチファイル内で実行されたコマンド(dir)の終了コードをマクロが取得しています😀#Excel#VBA#バッチファイル pic.twitter.com/ctCs84ScPS
— まさ@Excel、VBA、マクロ(経験年数16年) (@masamasa9785) April 5, 2021
ツイート内の動画では、Excelのマクロから呼び出されたバッチファイルの戻り値を取得しています。
VBA側から受け取った引数のディレクトリ名が存在すれば0(正常終了)を、ディレクトリ名が存在しなければ1(失敗)を返します。
Excelのマクロから引数をバッチファイルに渡して呼び出す方法
Excelのマクロから呼び出されたバッチファイルの戻り値を取得するには、次の流れの通りにコードを書いていきます。
コードの例
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%
コードの解説
このコードでまず見て頂きたいのは7行目です。
Exitコマンドに、コマンドの終了コードが格納されている変数「errorlevel」を指定しています。
なお、0が正常、0以外の値は異常終了であることを表します。
Exitコマンドに値を指定すると、バッチファイル完了後にマクロ側にExitコマンドに指定した値がマクロに渡されます。
最後に
この記事では、Excelのマクロから呼び出されたバッチファイルの戻り値を取得する方法についてご説明しました。
バッチファイルを実行するRunメソッドの戻り値がバッチファイルからの戻り値になります。
バッチファイル側はexitコマンドに値を設定することで、バッチファイルのexitコマンド終了後にマクロ側に値がマクロに渡されます。
詳しくはExcelのマクロとバッチファイルのコードそれぞれ参考にしてみてくださいね。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。