こんにちは。
本日は、VBAでコマンドを実行する方法を紹介します。
概要
WScript.Shellを使用します。
execを使用する
Dim wsh Set wsh = CreateObject("WScript.Shell") Dim cmd As String: cmd = "dir C:\" Dim wExec Set wExec = wsh.exec("%ComSpec% /c " & cmd) Do While wExec.Status = 0 DoEvents Loop Dim ret As String ret = wExec.StdOut.ReadAll MsgBox ret Set wExec = Nothing Set wsh = Nothing
少し説明します。
Set wExec = wsh.exec("%ComSpec% /c " & cmd)
「%ComSpec%」はcom.exeのフルパスを格納しています。
「/c」を指定することで、実行終了後にコマンドプロンプトを閉じます。
デバックなどで表示したままにしたい場合は「/k」を指定すると
開いたままになります。
result = wExec.StdOut.ReadAll
でコマンドプロンプトに出力されている結果を取得できます。
Runを使用する
Dim wsh Set wsh = CreateObject("WScript.Shell") Dim cmd As String: cmd = "dir C:\" Dim ret As Integer ret = wsh.Run("%ComSpec% /c " & cmd, 0, True) MsgBox ret Set wsh = Nothing
少し説明します。
ret = wsh.Run("%ComSpec% /c " & cmd, 0, True)
引数の内容は以下になっています。
- 第1引数:実行するコマンド
- 第2引数:ウィンドの指定
- 0:非表示
- 1:通常サイズ
- 2:最小化
- 3:最大化
- 第3引数:コマンドの実行モード
- True:同期
- False:非同期
戻り値は、0が成功で、それ以外はエラーとなります。
複数のコマンドを実行する
exec、Runともに、実行したいコマンドを&で連結します。
他は、単一のコマンドを実行する場合と同じです。
Dim cmd1 As String: cmd1 = "cd C:\" Dim cmd2 As String: cmd2 = "dir" Dim cmd As String: cmd = cmd1 & "&" & cmd2
まとめ
知っていると簡単にできますね。
コマンドを実行できるとできることの幅も広がるので
ぜひ、参考にしていただければ。
以上です。