Используемая вами команда Shell
: , асинхронная , что означает, что она может запускать более одного процесса одновременно, поэтому в случае двух операторов Shell
в строка, оба будут выполняться одновременно.
Альтернативный способ - вместо этого использовать команду Run
Windows Script Host (WScript.Shell
), так как у него есть больше опций, включая одну, чтобы дождаться завершения выполнения программы, прежде чем она продолжится.
Sub ShellWait(fName As String, Optional showWindow As Boolean = True)
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
wsh.Run fName, -showWindow, True
End Sub
Вы также можете полностью скрыть окно, указав False
в качестве второго параметра. (Осторожно с этой опцией, если требуется ввод пользователя!)
Например:
Sub demo()
ShellWait "x:\test.bat"
Beep
MsgBox "Finished running!"
End Sub
Дополнительная информация: