如何手动暂停 excel vba 执行

如何手动暂停 excel vba 执行

通常使用 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  

相关内容