この記事では、マクロから呼び出されたバッチファイルの実行結果を受け取る方法についてご説明します。
【動画】マクロから呼び出されたバッチファイルの実行結果を受け取る実際の動き
本題に入る前に、まずは次の動画をご覧ください。
まずはマクロからバッチファイルが呼び出されてバッチファイルが実行されます。
バッチファイルが実行されると、その実行結果をマクロ側が受け取りテキストボックスに出力しています。
マクロ作成の流れ
取得した実行結果は、今回テキストボックスに出力しています。
バッチファイルとExcelファイルの例
バッチファイル
今回は下のバッチファイルを用意しました。
@echo off rem pingの実行 ping 192.168.11.0
バッチファイルには、pingコマンドを実行するコードが記述されています。
バッチファイルを実行すると以下の結果が表示されます。(指定したIPアドレスが応答していない状態であることを知らせるメッセージが返ってきた)
Excelファイル
今回は下のExcelファイルを用意しました。
実行ボタンをクリックするとバッチファイルが実行されて、設置されたテキストボックスにpingコマンドの実行結果が出力されます。
先ほどのバッチファイルの実行結果と同じ内容がテキストボックスに出力されています。
コードの例
Option Explicit Private Sub btn_exec_Click() Dim wsh As Object 'WshShellインスタンス用変数 Dim exec As Object 'バッチファイル実行用変数 Dim batchFilePath As String '呼び出すバッチファイルの格納先 '呼び出すバッチファイルの格納先を取得する batchFilePath = ThisWorkbook.Path & "\0317.bat" 'WshShellオブジェクトからインスタンスを生成する Set wsh = CreateObject("WScript.Shell") 'バッチファイルを実行する Set exec = wsh.exec("cmd /c " & batchFilePath) 'バッチファイルで実行されたコマンドの実行結果すべてをテキストボックスに出力する TextBox1.Text = exec.StdOut.ReadAll End Sub
注目すべきコード①
最初に見て頂きたいのは13行目から16行目です。
'WshShellオブジェクトからインスタンスを生成する Set wsh = CreateObject("WScript.Shell") 'バッチファイルを実行する Set exec = wsh.exec("cmd /c " & batchFilePath)
コードの説明
以上のコードは、WshShellオブジェクト用インスタンスを生成してバッチファイルを実行する処理のコードです。
WshShellオブジェクトからインスタンスを生成したら、execメソッドでコマンドプロンプトを開き、コマンドプロンプト上で実行するバッチファイル(batchFilePath)を実行します。
実行し終わったら、コマンドプロンプトを閉じます。
「cmd」はコマンドプロンプトの実行ファイル「cmd.exe」を開くコマンドで、「/c」はコマンドを実行した後にコマンドプロンプトを閉じるようにするオプションです。
注目すべきコード②
次に見て頂きたいのは19行目です。
'バッチファイルで実行されたコマンドの実行結果すべてをテキストボックスに出力する TextBox1.Text = exec.StdOut.ReadAll
コードの説明
以上のコードは、バッチファイルで実行されたコマンドの実行結果すべてをテキストボックスに出力する処理のコードです。
StdOutプロパティからReadAllメソッドを呼び出し、バッチファイルの実行結果をすべて取得します。
今回は取得したバッチファイルの実行結果をテキストボックスに出力しています。
動作確認
「バッチファイルとExcelファイルの例」をご覧ください。
最後に
この記事では、マクロから呼び出されたバッチファイルの実行結果を受け取る方法についてご説明しました。
マクロから呼び出されたバッチファイルの実行結果を受け取りたい場合は本記事を参考にして頂けたら幸いです。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。