应用程序自动停止与消息“代码执行已停止”

从我在网上看到的来看,这是一个相当普遍的抱怨,但是回答似乎更少。问题是:

我们有许多 Excel VBA 应用程序,它们可以在许多用户的机器上完美地工作。但是在一台机器上,它们会在特定的代码行上停止。它们总是相同的线条,但是这些线条之间似乎没有任何共同点。

如果你按 F5(运行)后暂停,应用程序继续,所以它几乎像一个断点已经添加。我们已经尝试从菜单中选择“删除所有中断”,甚至添加一个中断,然后再次删除它。

我们以前在单个应用程序上遇到过这个问题,我们从模块中删除代码,编译,然后粘贴回去,等等,这些做法都让我们陷入了困境。

这个问题现在似乎与 Excel 本身有关,而不是单一的。Xls,所以我们有点不确定如何管理它。

如有任何帮助,我们将不胜感激:)

谢谢,

菲利普 · 惠廷顿

161457 次浏览

我会试试通常的补救方法: - 在你的 VBA 代码上运行 Rob Bovey 的 VBA 代码清理器 - 删除用户电脑上的所有外接程式,特别是 COM 和.NET 外接程式 - 删除所有用户.EXD 文件(MSoft Update 不兼容) - 在用户系统上运行 Excel 检测和修复程序 - 检查用户的.xlb 文件的大小(应该是20-30K) - 重新启动,然后删除所有用户临时文件

感谢大家的参与。通过在控制面板中选择修复,解决了这一问题。我猜这显式地重新注册了一些 Office 的本地 COM 组件,并且做了一些 REINSTALL 不做的事情。我希望后者只是通过一个检查表,有时接受什么,如果它已经安装了,也许。然后,我在注册自己的账户时遇到了一个单独的问题。NET dll for COM interop 在用户的机器上(尽管这也可以在其他机器上运行) ,但我认为这是我的错误,而不是 Microsoft。再次感谢,我真的很感激。

一种解决方案是 给你:

这个问题的解决方案是添加代码行 第一行中的“ Application.EnableCancelKey = xlDisable” 这将解决问题,你将能够执行宏 没有得到错误消息“代码执行已中断”。

但是,在插入这行代码之后,我就不能再使用 Ctrl + Break 了。所以它起作用了,但效果不大。

我找到了第二个办法。

  1. 在弹出窗口中按“调试”按钮。
  2. Ctrl + Pause|Break两次。
  3. 按播放按钮继续。
  4. 完成后保存文件。

在开发一个复杂的 Excel VBA 应用程序时,我曾经遇到过几次这个问题。有时 Excel 开始随机地破坏 VBA 对象。唯一的解决办法就是重启机器。重新启动后,Excel 通常开始正常运行。

很快我发现这个问题的可能解决方案是当宏不运行时按一下 CTRL + B reak。也许这个也能帮到你。

我也曾遇到过这样的问题,使用一个带有 foobar.xlsm (启用了宏)的 Excel 2007工作簿,只要关闭右边角落的红色 X 上的工作簿,完全不运行宏,或者任何“初始化”表单、工作簿或工作表宏,就会得到“代码执行被中断”。我得到的选项是“结束”或“继续”,调试总是灰色。我按照之前的海报建议的那样做了——控制面板-> 程序和特性-> 右键单击“ Microsoft Office Professional2007”(在我的例子中)-> 更改-> 修复。

这为我解决了问题。 我可能会添加这发生后不久的 MS 更新,我也发现了一个插件在 Excel 中称为“团队基础”从微软,我当然没有自愿安装

这个问题来自于 Office/Windows 中的一个奇怪现象。

在开发了同一段 VBA 代码并在过去几天里运行了数百次之后,我刚刚遇到了这个问题。唯一不同的是,就在遇到这个令人费解的问题之前,我不小心用一种非正统的方法结束了 VBA 代码的执行。

我清空了所有的临时文件,重启等等。.当我在完成所有这些之后再次运行代码时,我仍然遇到了问题——在我进入第一个循环之前。“按下弹出窗口中的“调试”按钮,然后按两次[ Ctrl + Break ] ,此后可以不停地继续”是有意义的,因为 Office/Windows 组合中的某些东西没有释放执行。卡住了。

冗余的 Ctrl + Break 操作可能解决了延迟执行。

我发现在宏没有运行的时候按下 ctrl + break 就解决了这个问题。

我现在的名声还不允许我发表这样的评论。 Stans 解决方案进入调试模式,按两次 Ctrl + Break,播放,保存确实解决了我的问题,但我有两个意想不到的转折:

  1. 我的项目结构是密码保护的,所以为了进入调试模式,我必须首先进入开发人员模式,点击项目结构并输入密码。

  2. 我的项目是一个模板文件(。Xmtl).我通过双击打开文件,它打开为。Xml,在前一个文件名的末尾有一个“1”。我按照 Stans 指令修复了 bug,并将其保存为... 1.xml 文件。当我再次打开模板时,这次是作为模板,并且想要对该文件应用相同的 bug 修复,bug 已经消失了!我没有更改这个文件,在执行宏时仍然没有 bug。对我来说,这意味着 bug 实际上不在文件中,而是在 Excel 中的(隐藏)设置中。

基于以下原因,我想为 斯坦的 答案2增加更多细节:

  • 我自己也面临过这个问题十几次,根据项目的情况,我在 Stan 的 巫毒魔法答案 # 1和 # 2之间做出了选择。当我不断面对它,我变得更好奇为什么它发生在第一位。

  • 我也想为 Mac 用户添加答案。

  • 这两种可能的答案都有局限性:

    • 如果代码是受保护的(而且您不知道密码) ,那么 答案一将无济于事。
    • 如果代码不受保护,那么 答案2将不允许您调试代码。

  1. 这种情况可能是由于以下任何一种原因:

    • 操作系统未将系统资源分配给 Excel 进程。(解决方案:一个只需要启动操作系统-成功率非常低,但已知道工作了很多次)

    • P-code 是在 VisualBasic (之前)中使用的中间代码。NET) ,因此它仍然在 VBA 中使用。它以牺牲较慢的执行速度为代价,启用了更紧凑的可执行文件。我为什么要说 P 代码?因为它有时会在多次执行和大文件之间损坏,或者仅仅是因为软件(Excel)的安装在某个地方损坏了。当 P 代码损坏时。代码执行总是被打断。解决方案: 在这些情况下,假设您的代码已经开始损坏,并且将来您的 Excel 工作簿可能也会损坏,从而给出诸如“ Excel 文件已损坏且无法打开”之类的消息。因此,作为一个快速的解决方案,您可以根据您的需求依赖于答案 # 1或答案 # 2。然而,永远不要忽视腐败的迹象。最好将代码模块复制到记事本中,删除模块,保存并关闭工作簿,关闭 Excel。现在,重新打开工作簿并使用前面复制到记事本的代码开始创建新模块。

  2. Mac 用户,尝试下面的任何一个选项,他们肯定会根据你的系统架构,即操作系统和 Office 版本工作

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

当宏立即挂起执行完成当前任务时,您将使用上述组合键进入中断模式。这是步骤2的替代品。

  1. 解决方案: 为了克服使用 答案一答案2的局限性,如果错误代码为18,则在 Error Handler 中使用 xlErrorHandlerResume语句。然后,中断作为错误发送到运行过程,可以被用 On Error GoTo 语句设置的错误处理程序捕获。可捕获的错误代码是18。当前过程被中断,用户可以调试或结束过程。如果错误处理程序具有恢复语句,则 微软提醒不要使用此语句,否则错误处理程序总是返回相同的语句。这正是我们在代码执行的不必要的无意义中断中所需要的。

如果它是一个幻影断点:

1删除违规的代码行

2再次运行代码

3重新粘贴线条

在花了几天时间研究这里和其他地方的所有答案之后,我发现了这个简单得可笑的解决方案。我想,如果我把它链接到我最初的问题,它可能会帮助其他一些可怜的家伙,因为它的问题是 当键盘上没有中断键时,VBA 中断执行,这是更适用的。

链接到原始答案

我今天也遇到了同样的问题,用这些步骤解决了它。

  1. 创建一个新模块
  2. 将导致问题的过程移动到这个新模块。
  3. 保存项目
  4. 再次运行宏。

这一次,代码执行将一直运行到完成,没有任何中间停止。