【问题标题】:Why does my VBA procedure sometimes stop in debug mode?为什么我的 VBA 程序有时会在调试模式下停止?
【发布时间】:2021-01-09 18:15:58
【问题描述】:

我在 Access 表单中有一个按钮单击事件,有时会打开 VBA 编辑器,并突出显示“出错...”行,就好像它处于调试模式一样。我可以 F5 继续其余的过程,它工作正常。

它不会每次都发生。它似乎是随机的,但似乎有一种模式是在文件打开后第一次单击此按钮时发生。不过不是每次都这样。

对于发生相同事情和后续解决方案的这个或以前的经验有什么想法吗?这可能是什么原因造成的?这是一种糟糕的用户体验。

【问题讨论】:

  • 你有一个断点吗?尝试导出并重新导入所有模块 - 有时 VBE 中的断点会出现“幻像”并且它们不会显示,但 IDE 仍然会在该位置中断,有点像编辑器和任何数据结构存储之间的某些东西不同步断点位置。导出和重新导入模块会强制编辑器删除它拥有的任何半编译损坏的缓存,然后一切都应该再次顺利运行。
  • 至于可能导致这种情况的原因,我想说这可能是 edit-and-continue 调试器功能中的一些模糊错误。
  • @MathieuGuindon - 听起来这可能是正在发生的事情,因为我在过去几天开发和测试这个模块时确实有断点。我为表单导出了类模块,但在重新导入之前似乎无法删除该模块。
  • 如果它不这样做,我可以确认我链接的帖子中高度赞成的接受答案确实多年来为我解决了这个烦恼(可见,对其他人也是如此!)

标签: vba ms-access ms-access-2016


【解决方案1】:

好吧,在运行任何代码之前(在启动过程中按住 shift 键以防止任何代码运行)。

现在,ctrl-g(跳转到 VBA IDE)。现在从工具。选择 debug->清除所有断点

像这样:

现在,打开任何代码模块 - 按 Enter 键“弄脏”代码。现在选择调试->编译(第一个菜单选项)。它会说编译“我的应用名称”。

确保代码可以编译。如果不存在,则仍然存在杂散断点。

接下来,您需要检查/更改错误的默认行为。

仍然在 VBA 编辑器/IDE 中

从菜单栏中选择工具->选项。默认是“中断未处理的错误”

如果您对所有错误都有中断?那么,甚至假设捕获甚至出错的代码会恢复下一个代码,它会爆炸并停止。通常开发人员会说尝试在集合中存在,而我们错误地点击以“表示”该元素不在该列表中。但是,THIS 假定默认的错误捕获设置没有更改。

因此,请仔细检查此设置,然后再检查三次。您可以开发多年,甚至有一些代码 ASSUME 可以出错。但是那几年的开发代码假定了默认值(在未处理的错误上中断。如果你对所有错误都有中断,那么你就是干杯,你会发现各种代码中断。(该选项的想法是让你调试代码无需禁用错误即可进行错误处理。并且使用“on-error resume next”,您实际上无法再调试部分代码了。

现在,如果上述步骤不能解决您的问题?

然后下一步是反编译您的应用程序。这将删除应用程序的已编译(二进制)部分。完成此操作后,您将进行完整的重新编译。

要反编译,您无法从 IDE 执行此操作,并且您必须使用完整限定路径来访问现有版本的访问权限。像这样说:

"C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE"
"c:\MyCoolApp\Invoice.accDB" /decompile

现在,当你在上面运行时,你真的不能让任何启动表单或代码运行。 (按住 shift 键。现在退出访问/应用程序。现在重新启动(同样没有代码在启动时运行)。

现在,在这一点上,我强烈推荐 Compact+ 修复(并且再次没有启动或运行代码)。所以即使在 C+R 上,你也必须按住 shift 键。

如果您在反编译期间启动应用程序,然后 C+R 允许任何代码运行,那么您必须在第一个反编译步骤重新开始。

好的,现在你完成了 C+R。现在是 ctrl-g,现在是 debug-compile。

【讨论】:

    猜你喜欢
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2023-03-15
    • 2015-12-13
    • 2013-10-17
    相关资源
    最近更新 更多