VBAでバッチファイル(bat)を実行する

バッチファイルを実行するにはShell関数を使う

バッチファイル(*.bat)を実行するにはShell関数かWshShellクラスを使います。

どちらを使うかはバッチファイルとVBAが同期か非同期かによります。バッチファイルの実行結果をVBAで待つ場合は同期、そうでなくそれぞれ独立して動作する場合を非同期と言います。

バッチの実行結果と同期の場合はWshShellクラスを使い、非同期の場合はWshShellクラスかShell関数を使います。WshShellクラスは同期、非同期のどちらも利用できます。

いずれも外部アプリケーションを実行するための仕組みです。

Shell関数の使い方や引数などの詳細は「VBAで他のアプリケーションで起動する(Shell)」をご参照ください。

WshShellクラスの使い方や引数などの詳細は「VBAで他のアプリケーションを同期起動する(WshShell)」をご参照ください。

なお、バッチファイルではなくコマンドプロンプトを起動してコマンドを実行したい場合は「VBAでコマンドプロンプトの起動とコマンドの実行を行う」をご参照ください。

以下ではバッチファイルを実行する際のサンプルを紹介します。

サンプルコードで使うバッチファイル

サンプルで使うバッチファイルは以下を利用します。ファイル名をtest.batとしています。

指定フォルダに移動して、新規フォルダを作成するコマンドです。

同期の場合(バッチファイルの結果をVBAで待たない場合)

Shell関数でバッチファイルのパスを指定して実行するだけのサンプルです。

Shell関数の使い方や引数などの詳細は「VBAで他のアプリケーションで起動する(Shell)」をご参照ください。

Shell関数の戻り値はプロセスIDです。一応取得していますが、用途がなければ削除して構いません。

7行目のShell関数ではバッチファイルの実行だけを行い、結果を待たずに次の処理に移行します。

非同期の場合(バッチファイルの結果をVBAで待つ場合)

こちらは非同期のサンプルです。WshShellクラスを利用します。WshShellクラスを利用するには参照設定が必要です。

WshShellクラスの使い方や引数などの詳細は「VBAで他のアプリケーションを同期起動する(WshShell)」をご参照ください。

9行目の2番目の引数がTrueになると非同期になります。

関連記事

サブコンテンツ

このページの先頭へ