中断/中止VBA循环

时间:2010-07-19 09:28:49

标签: excel vba loops interrupt

在Excel上的VBA中,我有数千个单元格的循环,这需要几分钟。

是否可以中止长期循环(如果是,如何)/我可以构建一个按钮或类似的东西来手动中断此循环吗?

构建一个按钮并用宏覆盖它不是问题,只有代码本身。

5 个答案:

答案 0 :(得分:12)

当Excel忙于执行宏时,它不会响应按钮 你有三个选择:

  1. 使用Ctrl+Break键(与按钮相对应)
  2. 让您的宏更快(可能会将Application.ScreenUpdating设置为 False会有所帮助)
  3. 制作你的宏 插入一个慢得多 内循环中的DoEvents。这个 Excel方式,Excel将转入按钮 与此同时。此按钮将触发的宏只是将全局变量设置为True(显然,您的内部循环应该在每次迭代时检查此变量,如果它是True则退出。)

答案 1 :(得分:4)

Application.EnableCancelKey可能是你正在寻找的东西 当用户按下转义符时,将控件传递给错误处理程序时,请查看链接URL上的示例代码。

答案 2 :(得分:2)

除了其他答案,

让我们假设您想破坏代码并仍然在代码中执行某些操作,您可以通过捕获中断并处理它来实现此目的

您可以使用Err.Number来捕获错误编号

具体而言,Err.Number = 18表示用户休息

Sub handleError()
On Error GoTo MyErrorHandler
 Application.EnableCancelKey = xlErrorHandler

 'Just an example to show something is running
 For i = 0 To 900000
 Range("A1") = i
 Next i

MyErrorHandler:
If Err.Number = 18 Then '18 =User interrupt
     MsgBox " You clicked Ctrl + Break "
     Exit Sub

End If
End Sub

答案 3 :(得分:1)

  • 在循环内添加对DoEvents的调用。
  • 添加公共布尔模块级别标志变量
  • 向用户界面添加按钮
  • 在按钮的事件处理程序中,将标志设置为true
  • 在循环中检查变量,如果正确,则中止循环。

    我已经在Excel用户窗体中使用了此功能,但没有在工作表上使用按钮。

答案 4 :(得分:0)

不,按钮不会停止正在运行的宏。它是一个开发者的东西,默认情况下控件不应该在用户的手中。您可以尝试以下组合键来停止宏。

  • Ctrl + Pause / Break
  • Ctrl + ScrLk
  • Esc + Esc (连续按两次)

有时,键盘上没有正确的键组( Pause Break ScrLk)(主要发生在笔记本电脑用户身上)并且按 Esc 2,3或多次也不会停止宏。

我也陷入困境,最终在Windows的辅助功能中找到了解决方案,之后我尝试了所有研究选项,其中3个在3种不同的场景中为我工作。

步骤#01 :如果您的键盘没有特定的按键,请不要担心并打开屏幕键盘'从Windows实用工具中按 Win + U

步骤#02 :现在,尝试以上任何选项,根据您的系统架构,操作系统和Office版本,它们肯定会有效

使用上述组合键将进入中断模式,因为宏暂停执行,立即完成当前任务。例如,如果它正在从网络中提取数据,那么它将在执行任何下一个命令之前立即停止但是在拉动数据之后,可以按下 F5 F8 继续调试。