アプリ・ファイルを起動して終了まで待機する (WSH.Run)

VBAからアプリやファイルを起動して、ユーザーがそのアプリを終了するまで待機(マクロを一時停止)する方法を紹介します。

これには、WshShellオブジェクトのRunメソッドを使います。

以下のコードを実行すると、まずExcelウィンドウが起動してファイルが開かれます。ユーザーがそのウィンドウを閉じると、VBAの処理が再開されてメッセージボックスが表示されます。なお、ファイルだけでなくウィンドウを閉じる必要があります。このマクロからの起動でないExcelウィンドウは閉じる必要はありません。

Sub Wsh_Run()

  Dim objWSH As Object
  Set objWSH = CreateObject("Wscript.Shell")
  
  objWSH.Run "excel ""D:\test\サンプル.xlsx""", 1, True
  MsgBox "閉じました"

  Set objWSH = Nothing
End Sub
構文
WshShellオブジェクト.Run Command, [WindowStyle], [WaitOnReturn]
Command

実行するコマンドとして、アプリまたはファイルを指定します。

アプリは、名前またはパスを指定します。例えばメモ帳の場合は「notepad」と「%windir%\system32\notepad.exe」のどちらでも使えます。

不明な場合は、Windows + R キーから[ファイル名を指定して実行]で試してみるとよいでしょう。

名前を指定して実行

ファイルは、アプリ指定の後にスペースを挟んでパスを指定します。ダブルクォーテーションを含めるところが少しややこしいですが、次の要領で記述します(書き方が異なりますが同じ内容です)。

"excel ""D:\test\サンプル.xlsx"""
"excel " & Chr(34) & "D:\test\サンプル.xlsx" & Chr(34)

WindowStyle

ここは規定値の「1」でよいでしょう。ウィンドウがアクティブ状態で起動されます。

WaitOnReturn

今回かんじんなのはここでの「True」の指定です。起動したウィンドウが閉じるまで(コマンドによるインスタンスが終了するまで)待機します。マクロは一時停止になるので、ウィンドウはユーザーが閉じることになります。

False」または省略の場合、アプリの起動・終了の結果を待たずにマクロの処理が続行されます。

WshShellオブジェクト.Run は戻り値として、正常時に0 を返します。
オブジェクトを取得してファイルの内容を操作するような使い方はできません。

 

WshShellオブジェクト.Run は、上記と同じ構文で下記のような目的にも使えます。

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