Excel VBA应用程序突然停止,并显示“代码执行已停止”的消息。

180

根据我在网上看到的信息,这是一个相当普遍的问题,但答案似乎更为罕见。问题如下:

我们有一些Excel VBA应用程序在许多用户的计算机上运行得非常完美。然而,在某台计算机上,它们会在某些代码行上停止工作。始终是同一行代码,但这些行似乎彼此之间没有任何共同点。

如果在停止后按下 F5(运行),则应用程序会继续运行,因此几乎可以认为已添加了断点。我们尝试从菜单中选择“删除所有断点”,甚至添加断点并再次删除。

我们以前曾遇到过单个应用程序的这个问题,并通过从模块中剪切代码、编译,然后再将其粘贴回去等方法来“修补”它们。

现在的问题似乎与Excel本身有关,而不是单个 .xls,因此我们有些不确定如何处理它。


2
用户在任何处理过程中按下了Esc键吗?或者有其他应用程序发送了Esc键吗? - shahkalpesh
1
在选择“删除所有断点”之后,您是否还重新编译并保存了VBA项目?我曾经在Word VBA中遇到过一个相关的问题,即先前删除的断点仍然会导致程序中断。 - Dirk Vollmar
在执行过程中没有任何东西被处理,shahkalpesh。Divo - 谢谢,我可能没有按照那个顺序精确地尝试过。现在会这样做... - Phil Whittington
除了divo的评论之外,注释掉相关行和任何会停止调试的行可能是有用的,然后可以取消注释并重新编译代码(再次)。 - Fionnuala
我忘了提到:为了实际触发重建,通常需要修改一行代码,然后将光标移动到下一行以标记源代码已被修改(例如进行更改,向下移动光标,再向上移动光标并手动撤销更改)。 - Dirk Vollmar
13个回答

0

如果这是一个幽灵断点:

1 删除有问题的代码行

2 再次运行代码

3 重新粘贴该行代码

在花费了几天时间浏览所有答案后,我发现这个解决方案非常简单。我想,如果我将其链接到我的原始问题上,它可能会帮助其他可怜的人,因为它更适用于VBA break execution when there's no break key on keyboard这个问题。

链接到原始答案


0

今天我遇到了同样的问题,通过以下步骤解决了它。

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

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


0

简而言之

打开出现问题的模块,按下以下按键:

  • ctrl+home 跳转到模块顶部
  • 'Option Explicit 前添加注释
  • down 解析所有没有 Option Explicit 的代码,并告诉 VBA 需要重新编译全部代码
  • up
  • backspace 取消注释
  • alt+d
  • l 触发整个模块的重新编译

上述解决方案假设 VBA 项目中的模块使用了 Option Explicit(这是非常好的实践)。如果您的模块没有使用它,那么您可以选择所有代码,剪切并粘贴回去,而不是注释和取消注释第一行。

详细说明

此问题是由增量编译出现问题引起的。

当一个模块被编辑时,VBA只编译修改过的函数,而不是整个项目。有时增量编译会出现问题,在执行时可能会发生两种情况:出现像这里提到的幽灵断点,或者出现关于未定义或错误类型变量的错误。
那些提到修改一行代码的答案通常会有帮助,因为它们会触发包含该行代码的函数的编译,进而可能触发其他函数甚至整个项目的编译。但问题有时会再次出现,因为仅修改一行代码可能无法触发整个项目的编译。
得到最多赞同票数的答案可能会有帮助,但首先需要重现问题,而有时在开发机器上无法重现该问题。
正确的解决方案是强制重新编译整个项目。
我认为没有明确的方法来实现这一点,但可以强制重新编译最大的模块,即被所有模块和类使用或引用的模块。没有命令可以触发这样的重新编译,但通过更改一个全局指令就可以完成任务。
在某些情况下,可能需要在多个模块中重复这些步骤。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接