なんだかGoodVibes

日々の勉強メモです。

【VBA】コマンドを実行する

こんにちは。
本日は、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


まとめ

知っていると簡単にできますね。
コマンドを実行できるとできることの幅も広がるので
ぜひ、参考にしていただければ。
以上です。