如何在VBA中逐个执行多个批处理文件?

时间:2016-06-02 20:39:08

标签: vba excel-vba batch-file excel

我有两个批处理文件。第一个是从SFTP下载文件。第二是操纵一些本地文件。由于我必须等到第一个完成,如何在VBA中保存程序以便批处理文件可以逐个执行?

现在我正在使用

Call Shell("Bat1.bat")
Call Shell("Bat2.bat")

但是,两个批处理文件将同时执行。 Bat2.bat将不会等待Bat1.bat

由于

1 个答案:

答案 0 :(得分:1)

首先,删除Call语句,不需要它。

Shell "Bat1.bat"

Bat1.bat在完成后创建一个空的“标记”文件,例如bat1.ready。然后使您的VBA代码循环,直到它找到.ready文件:

While Dir("bat1.ready") = vbNullString
    DoEvents
Wend

这应该保持您的UI /主机应用程序响应,而在标记文件启动之前基本上什么都不做。

接下来,删除标记文件并继续bat2

Kill "bat1.ready"
Shell "Bat2.bat"

钽哒!

Shell函数returns immediately,并返回创建的TaskID。如果您无法以任何方式修改批处理文件(或询问谁可以修改它,如果他们可以这样做),那么您可能需要使用一些Win32调用来使用该TaskID来确定任务是否已完成,如在Tim Williams提供的ShellAndWait链接中in a comment