首页 文章

Excel VBA应用程序自动停止,并显示消息“代码执行已停止”

提问于
浏览
119

从我在网上看到的情况来看,这是一个相当普遍的抱怨,但答案似乎更少见 . 问题是这样的:

我们有许多Excel VBA应用程序,可以在许多用户的计算机上完美运行 . 然而,在一台机器上,它们停在某些代码行上 . 它总是相同的线条,但这些线条似乎没有任何共同之处 .

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

我们以前曾经遇到过单个应用程序的这个问题,我们通过从模块中删除代码,编译然后将其粘贴回来等来“改进”它 .

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

感谢任何帮助:)

谢谢,

菲利普惠廷顿

11 回答

  • 0

    在开发一个复杂的Excel VBA应用程序期间,我几次遇到过这个问题 . 有时Excel开始随机破坏VBA对象 . 唯一的补救措施是重启机器 . 重启后,Excel通常开始正常运行 .

    很快我发现这个问题的可能解决方案是在宏未运行时按CTRL Break一次 . 也许这对你也有帮助 .

  • 2

    我找到了第二个解决方案 .

    • 在弹出窗口中按"Debug"按钮 .

    • 按Ctrl Pause | Break两次 .

    • 点击播放按钮继续 .

    • 完成后保存文件 .

    希望这有助于某人 .

  • 2

    这个问题来自Office / Windows中的一个奇怪的怪癖 .

    在开发了相同的VBA代码并在过去几天中运行了数百次(字面意思)后,我刚刚遇到了这个问题 . 唯一不同的是,在遇到这个令人困惑的问题之前,我意外地用非正统的方法结束了VBA代码的执行 .

    我清理了所有临时文件,重新启动等等...当我在所有这些之后再次运行代码时,我仍然遇到了问题 - 在我进入第一个循环之前 . 有意义"press " Debug " button in the popup, then press twice [Ctrl+Break] and after this can continue without stops"因为Office / Windows组合中的某些内容尚未释放执行 . 它被卡住了 .

    冗余Ctrl Break操作可能会解决延迟执行 .

  • 5

    一个解决方案是here

    此问题的解决方案是在宏的第一行添加代码行“Application.EnableCancelKey = xlDisabled” . 这将解决问题,您将能够成功执行宏而不会收到错误消息“代码执行已被中断“ .

    但是,在我插入这行代码之后,我再也无法使用Ctrl Break了 . 所以它有效但不是很大 .

  • 2

    我发现在宏未运行时按下ctrl break解决了问题 .

  • -1

    我会尝试通常的补救措施: - 在你的VBA代码上运行Rob Bovey的VBA代码清理器 - 删除用户PC上的所有插件,特别是COM和.NET插件 - 删除所有用户.EXD文件(MSoft更新不兼容) - 运行Excel检测和修复用户系统 - 检查用户的.xlb文件的大小(应为20-30K) - 重新启动然后删除所有用户的临时文件

  • 1

    感谢大家的投入 . 通过在控制面板中选择REPAIR解决了此问题 . 我想这显然重新注册了Office的一些本机COM组件,并且做了REINSTALL没有的东西 . 我希望后者只是通过一个清单,有时接受已经安装的东西,也许 . 然后我在用户的机器上为COM互操作注册我自己的.NET dll有一个单独的问题(尽管这也适用于其他机器)虽然我认为这是我的错误而不是微软 . 再次感谢,我真的很感激 .

  • 346

    我有这个问题也使用excel 2007与foobar.xlsm(启用宏)工作簿,通过简单地尝试关闭右角的红色X上的工作簿,没有运行宏来获得“代码执行已被中断”全部或任何“初始化”表单,工作簿或工作表宏 . 我得到的选项是“结束”或“继续”,调试始终是灰色的 . 我做了之前的海报建议控制面板 - >程序和功能 - >右键单击“Microsoft Office Proffesional 2007”(在我的情况下) - >更改 - >修复 .

    这解决了这个问题为了我 . 我可能会在MS更新后很快添加这个,我还在Excel中发现一个名为“Team Foundation”的Excel中的插件,我当然没有自愿安装

  • 13

    我想将更多细节添加到Stan's answer #2,原因如下:

    • 我自己多次面对这个问题,根据项目情况,我选择了stan的voodoo magic answer #1或#2 . 当我继续面对它时,我变得更加好奇,为什么它发生在第一位 .

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

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

    • 如果代码受到保护(并且您不知道密码),那么answer #1将无济于事 .

    • 如果代码不受保护,则answer #2将不允许您调试代码 .


    • 可能由于以下任何原因而发生:

    • 操作系统未将系统资源分配给Excel进程 . ( Solution: 需要启动操作系统 - 成功率非常低,但已知多次工作)

    • P代码是在Visual Basic(.NET之前)中使用的中间代码,因此它仍然在VBA中使用 . 它以更慢的执行速度为代价实现了更紧凑的可执行文件 . 我为什么要谈论p代码?因为它有时会在多次执行和大文件之间被破坏,或者仅仅因为安装了软件(Excel)而在某处损坏了 . 当p代码腐败时 . 代码执行不断被中断 . Solution :在这些情况下,假设您的代码已经开始损坏,将来您的Excel工作簿也会因为"excel file corrupted and cannot be opened"等消息而损坏 . 因此,作为一种快速解决方案,您可以根据您的要求依靠答案#1或答案#2 . 但是,永远不要忽视腐败的迹象 . 最好在记事本中复制代码模块,删除模块,保存和关闭工作簿,关闭excel . 现在,重新打开工作簿并开始使用之前复制到记事本的代码创建新模块 .

    • Mac用户,尝试以下任何选项,它们肯定会起作用,具体取决于您的系统架构,即操作系统和Office版本

    • Ctrl暂停

    • Ctrl ScrLk

    • Esc Esc(连续按两次)

    使用上述组合键将进入中断模式,因为宏暂停执行,立即完成当前任务 . 这是第2步的替代 .

    • Solution: 为了克服使用answer #1answer #2的限制,如果错误代码是18,我在错误处理程序中使用 xlErrorHandlerResume 语句 . 然后,中断作为错误发送到正在运行的过程,由错误处理程序集捕获使用On Error GoTo语句 . 可捕获的错误代码为18.当前过程被中断,用户可以调试或结束该过程 . Microsoft请注意,如果错误处理程序具有resume语句,则不使用此方法,否则错误处理程序将始终返回到同一语句 . 这正是我们想要的代码执行中无意义的无意义中断 .

  • 15

    我目前的声誉尚不允许将此作为评论发布 . Stans解决方案进入调试模式,按两次Ctrl Break,播放,保存确实解决了我的问题,但我有两个意想不到的扭曲:

    • 我的项目结构受密码保护,因此为了进入调试模式,我必须先进入开发人员模式,单击项目结构并输入密码 .

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

  • 3

    现在问题似乎与Excel本身有关

    重新安装并修补它:)其他那很难说 .

相关问题