linux脚本程序等待,VBA调⽤SHELL脚本并等待程序结束
VBA调⽤Shell是异步处理,以下为同步处理代码,注释写的还⾏,就不多说了。可以直接拿到本地DEBUG以下,注意将下⾯的本地路径替换为你要运⾏的bat⽂件。
' 引⼊外部函数 PtrSafe⽤来避免不兼容问题(32位,64位 版本等)
'取得能够对进程进⾏操作的处理器,第⼀个参数决定能够进⾏哪些操作 第三个参数传⼊进程PID(⼀个处理器只对应传⼊PID参数的这⼀个进程)
Private Declare PtrSafe Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
'拿到进程的运⾏状态并传递给第⼆个参数。第⼀个参数为处理器
Private Declare PtrSafe Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare PtrSafe Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Const PROCESS_QUERY_INFORMATION = &H400 '⼗进制是1024
Const STILL_ALIVE = &H103 '⼗进制529 表明进程仍然存活
Sub wocao()
'运⾏脚本并获取进程ID,第⼆个参数决定CMD窗⼝如何显⽰,此处为最⼩化。
pid = Shell("C:\Users\82138\Desktop\process.bat", vbMinimizedFocus)shell代码
'得到对进程进⾏操作的能⼒
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0, pid)
isDone = False
Do
'通过处理器拿到进程状态码
Call GetExitCodeProcess(hProcess, ExitCode)
Debug.Print ExitCode
DoEvents
'如果状态码⼀直是运⾏中(529),则⼀直循环
Loop While ExitCode = STILL_ALIVE
'-----------------END-------------------
'关闭处理器(类似于JAVA的释放对象内存)
Call CloseHandle(hProcess)
MsgBox "RUN END."
End Sub
下⾯是我的测试bat⽂件,你可以使⽤⾃⼰的。
rem 打印1到10000
for /L %%i in (1,1,10000) do echo %%i
上述VBA运⾏会等到bat脚本运⾏完之后,才会弹出RUN END 的提⽰框。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。