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)
'得到对进程进行操作的能力
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0, pid)
isDone = False
Do
'通过处理器拿到进程状态码
Call Ge

本文提供了一段VBA代码,用于同步调用Shell脚本并等待其结束。通过修改代码中的本地路径,可以应用于任意bat文件。在运行VBA后,会等待bat脚本执行完毕,然后显示'RUN END'提示框。
最低0.47元/天 解锁文章
997





