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

バッチファイルを実行するにはShell関数かWshShellクラスを使う

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

どちらを使うかはバッチファイルとVBAが同期か非同期かによります。

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

Shell関数は非同期で、WshShellクラスは同期、非同期のどちらでも利用できます。

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

以下ではバッチファイルを実行するサンプルを、非同期の場合と同期の場合それぞれ紹介します。

Shell関数と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画面→ツールメニュー→参照設定で「Windows Script Host Object Model」を選択します。

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

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

関連記事

サブコンテンツ

このページの先頭へ