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
は、上記と同じ構文で下記のような目的にも使えます。