vba: выполнить оболочку после завершения предыдущей оболочки - PullRequest
0 голосов
/ 01 сентября 2018

Как вызвать вторую оболочку в этом случае после нажатия паузы?

Shell "cmd /c cd %tmp% && echo hello > tmpfile && pause", 1
Shell "cmd /c cd %tmp% && echo hello > tmpfile && pause", 1

и в этом случае

Shell "cmd /c cd %tmp% && echo hello > tmpfile", 0
Shell "cmd /c cd %tmp% && echo hello > tmpfile", 0

1 Ответ

0 голосов
/ 01 сентября 2018

Используемая вами команда 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

Дополнительная информация:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...