VBA共通:VBAからDOSのコマンドを実行する方法

VBA共通:VBAからDOSのコマンドを実行する方法

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のコマンドを実行する場合、指定できるのはウィンドウサイズと同期/非同期モードの指定くらいしかできない。

特に同期モードについては、何も指定しないと非同期で動作することに注意が必要。

コメント

タイトルとURLをコピーしました