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)

'得到对进程进行操作的能力

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 的提示框。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值