通常使用 Esc 或 Ctrl+Break 来停止VBA 代码,但是有没有办法暂停执行,就像在 Visual Studio 中一样?
答案1
如果项目已解锁且可查看,则 Ctrl-Break 应在当前语句处暂停/中断。如果您的代码使用类,您可能需要选择 VBE 的“工具.选项..常规选项卡:类模块中的中断”,但不要忘记将其切换回来,否则您可能会在生产环境中得到意外的结果。
如果您需要停止从 Excel 工作表/控件触发事件,您可以Application.EnableEvents = False
在直接窗口或代码中使用。
答案2
VBA 是一个单线程应用程序,这就是它无法响应事件的原因。可接受的答案是这样做的一种方法。另一种方法是将命令 DoEvents 添加到长时间运行的循环内的代码中。
For i = 1 to 10000
' Do something long
DoEvents
Loop
答案3
如果需要等待某个特定进程运行,那么可以将 PID 传递给以下函数。一旦进程执行完成,VB 语句的正常执行将再次开始。
Public Sub processCHK(cid As Long)
Dim strComputer As String
Dim colProcesses
Dim objWMIService
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Do
DoEvents
' Update the collection of processes returned
Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE ProcessID " & " = '" & cid & "'")
Loop Until colProcesses.count = 0
End Sub