【问题标题】:Control Break out of Infinite Loop In 2010 (2013) Excel VBA2010(2013)Excel VBA中无限循环的控制突破
【发布时间】:2014-03-11 08:39:27
【问题描述】:

如果我使用我的新 Excel 编写创建无限循环的代码,Ctrl + Break 将不再起作用。 Esc 键等也没有。

我浏览了整个网络,似乎 Microsoft 有一个错误并且不想修复它。

有没有办法将 Ctrl + Break 功能重新引入 VBA,所以如果将来发生这种情况,我不会失去工作/强制关闭?

【问题讨论】:

    标签: excel vba infinite-loop break ctrl


    【解决方案1】:

    Alt + Esc。按住键直到它断开。

    从 Windows 7 开始,这将在所有打开的窗口中循环。别介意,继续挤压它。

    【讨论】:

    • 如果无限循环包括显示 MessageBox,这将不起作用。 MsgBox 阻止所有输入到 Excel 中。
    • 按住键 10 秒钟,它起作用了 - 我不敢相信。谢谢约翰
    • 这对我不起作用,但是 ctrl + pause break 可以。请务必点击弹出窗口中的“结束”,而不是“调试”。
    • 你救了我的命!!!超级有用的提示,非常感谢!!!
    • 正如一个已经写过的那样:Windows 10 上的 ALT + ESC 在打开的窗口中循环,所以这不起作用
    【解决方案2】:

    至少在 Office 2013 上,Ctrl+Scroll Lock 可以做到这一点。我不需要更改任何设置或启用任何东西。

    (公然插件:my blog post 链接到此信息的原始来源:))

    【讨论】:

    • @Colin 当我第一次看到它时,我的反应差不多:)。
    • 即使 Break 位于 Pause 键上,Ctrl+Scroll Lock 仍然有效!
    【解决方案3】:

    减轻这种非常烦人的行为的一种方法是包含

    DoEvents
    

    在循环中。不必每次迭代都执行,只要定期调用,Ctrl Break 还是可以的。

    注意:我通常在调试代码后将其删除,以避免任何性能影响

    【讨论】:

      【解决方案4】:

      对于那些尝试了之前提出的解决方案但无济于事的人,试试这个。它对我有用(windows8,Excel 2016)

      在 VBA 代码窗口上,左键单击并按住(就像您要拖动该窗口一样),同时按住 Alt+ESC 键。它破坏了执行,并问我是要继续,还是调试...我当然选择了调试。

      【讨论】:

      • Windows 10 上的 ALT + ESC 在打开的窗口中循环,所以这不起作用。
      • 虽然 ALT + ESC 在打开的窗口中循环是真的,但它仍然可以有效地打破循环(至少有时)
      • 使用鼠标和alt+esc 可以工作。也许鼠标会停止窗口循环并使用 alt+esc 专注于中断。晚上保护..
      • 它在 Windows 10 下对我有用,好技巧
      【解决方案5】:

      如果它可以帮助任何人,那么在宏未运行时按 Ctrl+break 仅在您在开发人员之外执行此操作时才有效。

      【讨论】:

        【解决方案6】:

        另一种方法是在循环中故意引入错误。例如说您的循环不应运行超过 1000 次:

        Function XYZ()
        do while(..)
        errcnt = errcnt + 1
        
        if errcnt > 1000 then
          cells.find(what:="Chunk Norris").activate
        exit function
        endif
        
        loop
        end function
        

        它会产生错误并“破坏”代码

        【讨论】:

        • 感谢 Alex,这是一种有趣的方式。但我想知道我是否可以像我一样更改 VBA 中的任何命令,例如 Ctrl + Shift + 0,它允许我取消隐藏行。该命令在较新版本的 Excel 中丢失了,但我能够重新引入它。再次感谢!
        • 哈哈好的,您可以在即时窗口(ctrl-G)中查看EnableCancelKey;键入不带双引号的“?Application.EnableCancelKey”,看看它是否返回 0
        • 最好使用debug.assert errcnt <= 1000 来获得这个效果。
        • Alex- 奇怪的是 application.enablecancelkey = 1,所以这不是问题。我想我将不得不对此不满意,并会接受 Chris 的建议……谢谢各位先生!
        • @Tommyz 不用担心,事实上 Chris 的建议将是我下一步的测试。很高兴有适合您的解决方案!
        【解决方案7】:

        如果您处于设计模式,则在 VBA 编辑器中也无法使用中断 (Ctrl + Break)。在这种情况下,您可以按方形停止图标右侧的设计模式图标。这会将编辑器带回常规模式,然后 break 选项变为可用。

        【讨论】:

          【解决方案8】:

          我可怜的键盘上没有“中断”按钮。我唯一的选择是按 X 关闭程序或 alt+F4。我也必须编写一些代码。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-01-02
            • 1970-01-01
            • 2014-12-17
            • 1970-01-01
            • 2018-03-22
            • 2017-06-20
            相关资源
            最近更新 更多