VBAからDOSのコマンドを実行したい場合には、「WScript.Shell」オブジェクトを生成してRunメソッドでDOSコマンドを指定すればよい。
以下にVBAからMS-DOSのコマンドを実行するサンプルを記述。
WScript.ShellオブジェクトのRunメソッドの構文
WScript.ShellオブジェクトのRunメソッドの構文は以下のとおり。
WScript.Shellオブジェクト名.Run "実行コマンド",ウィンドウサイズの指定,同期モード
実行された際のウィンドウサイズ(DOS窓)指定
ウィンドウサイズ(DOS窓)の指定は、コマンド実行時のウィンドウサイズを数値で指定する。
ウィンドウのサイズ | 指定する値 |
---|---|
非表示 | 0 |
通常ウィンドウサイズ | 1 |
最小化 | 2 |
最大化 | 3 |
DOSコマンド実行時の同期/非同期モードの指定
通常DOSコマンドをVBAから実行すると非同期、つまりDOSで実行したコマンドが終了するしないにかかわらず、次のコードが実行される。
DOSのコマンドの実行が終了するのを待って次のコードを実行したい場合は、同期モードの指定に"True"を指定する。
VBAからDOSコマンドを実行するサンプルプログラム
以下にVBAからDOSコマンドを実行するサンプルプログラムを記載する。
SMTPサービスを起動するサンプルプログラム。
以下はSMTPサービスを起動するVBAのサンプルプログラム。
サービスの起動を待つように同期モードを"True"としている。
Sub Sample_WShell01()
Dim ShellObj
Set ShellObj = CreateObject("WScript.Shell")
ShellObj.Run "net start smtpsvc", 0, True
End Sub
ネットワーク上の共有ドライブに接続するサンプルプログラム
以下は、ネットワーク上の共有フォルダに接続するサンプルプログラム。
ドライブ割り当ては行っていないが、接続が終了するまで待つように同期モードを"True"としている。
Sub Sample_WShell()
Dim ShellObj
Set ShellObj = CreateObject("WScript.Shell")
ShellObj.Run "net use ¥¥ServerName¥ShareName password /user:username, 0, True"
End Sub
VBAからDOSコマンドを実行する方法のまとめ
VBAからDOSのコマンドを実行する場合、指定できるのはウィンドウサイズと同期/非同期モードの指定くらいしかできない。
特に同期モードについては、何も指定しないと非同期で動作することに注意が必要。
コメント