为什么我的 VBA 程序有时会在调试模式下停止?
Why does my VBA procedure sometimes stop in debug mode?
我在 Access 表单中有一个按钮单击事件,有时会打开 VBA 编辑器,其中 'On Error...' 行突出显示,就好像它处于调试模式一样。我可以按 F5 继续其余的过程,它工作正常。
并非每次都会发生。它似乎是随机的,除了似乎有一种模式,即在文件打开后第一次单击此按钮时会发生这种情况。不过不是每次都这样。
对这次或以前发生同样事情的经历和后续解决方案有什么想法吗?这可能是什么原因造成的?这是糟糕的用户体验。
好吧,在 运行 任何代码之前(在启动期间按住 Shift 键以防止任何代码 运行 宁)。
现在,ctrl-g(跳转到 VBA IDE)。现在从工具。选择
调试->清除所有断点
像这样:
现在,打开任何代码模块 - 按 Enter 键“修改”代码。现在选择调试->编译(第一个菜单选项)。它会说编译“我的应用程序名称”。
确保代码编译通过。如果没有,那么杂散断点仍然存在。
接下来,您需要 check/change 错误的默认行为。
还在 VBA editor/IDE
从菜单栏中选择工具->选项。默认是“Break on Unhandled errors”
如果你在所有错误上都中断了?好吧,甚至假定陷阱甚至 on-error 恢复下一个代码的代码都会爆炸并停止。通常开发人员会说 try for existence in a collection,而我们错误地点击以“意味着”该元素不在该列表中。但是,THIS 假设默认错误陷阱设置未更改。
因此,请仔细检查此设置,然后再检查三次。您可以开发多年,甚至可以假设一些代码出错。但是那几年的开发代码采用了默认设置(在未处理的错误上中断。如果你在所有错误上中断,那么你就完蛋了,你会发现各种代码中断。(该选项的想法是让你调试代码使用错误处理而不必禁用错误。然后说 on-error resume next,您实际上不能再调试部分代码了。
现在,如果上述步骤不能解决您的问题?
那么下一步就是de-compile你的申请了。这将删除应用程序的已编译(二进制)部分。执行此操作后,您将执行完整的 re-compile.
至 de-compile,您不能从 IDE 执行此操作,您必须使用现有访问版本的完整限定路径。像这样说:
"C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE"
"c:\MyCoolApp\Invoice.accDB" /decompile
现在,当您 运行 以上时,您真的不能让任何启动表单或代码 运行。 (按住 shift 键。现在退出 access/application。现在 re-launch(启动时再次没有代码到 运行)。
现在,此时我强烈推荐 Compact+ Repair(再次没有启动或代码到 运行)。所以即使是C+R,也得按住shift键
如果您在反编译期间启动应用程序,然后 C+R 允许任何代码 运行,那么您必须在第一个反编译步骤重新开始。
好的,现在你完成了 C+R。现在 ctrl-g,现在 debug-compile。
我在 Access 表单中有一个按钮单击事件,有时会打开 VBA 编辑器,其中 'On Error...' 行突出显示,就好像它处于调试模式一样。我可以按 F5 继续其余的过程,它工作正常。
并非每次都会发生。它似乎是随机的,除了似乎有一种模式,即在文件打开后第一次单击此按钮时会发生这种情况。不过不是每次都这样。
对这次或以前发生同样事情的经历和后续解决方案有什么想法吗?这可能是什么原因造成的?这是糟糕的用户体验。
好吧,在 运行 任何代码之前(在启动期间按住 Shift 键以防止任何代码 运行 宁)。
现在,ctrl-g(跳转到 VBA IDE)。现在从工具。选择 调试->清除所有断点
像这样:
现在,打开任何代码模块 - 按 Enter 键“修改”代码。现在选择调试->编译(第一个菜单选项)。它会说编译“我的应用程序名称”。
确保代码编译通过。如果没有,那么杂散断点仍然存在。
接下来,您需要 check/change 错误的默认行为。
还在 VBA editor/IDE
从菜单栏中选择工具->选项。默认是“Break on Unhandled errors”
如果你在所有错误上都中断了?好吧,甚至假定陷阱甚至 on-error 恢复下一个代码的代码都会爆炸并停止。通常开发人员会说 try for existence in a collection,而我们错误地点击以“意味着”该元素不在该列表中。但是,THIS 假设默认错误陷阱设置未更改。
因此,请仔细检查此设置,然后再检查三次。您可以开发多年,甚至可以假设一些代码出错。但是那几年的开发代码采用了默认设置(在未处理的错误上中断。如果你在所有错误上中断,那么你就完蛋了,你会发现各种代码中断。(该选项的想法是让你调试代码使用错误处理而不必禁用错误。然后说 on-error resume next,您实际上不能再调试部分代码了。
现在,如果上述步骤不能解决您的问题?
那么下一步就是de-compile你的申请了。这将删除应用程序的已编译(二进制)部分。执行此操作后,您将执行完整的 re-compile.
至 de-compile,您不能从 IDE 执行此操作,您必须使用现有访问版本的完整限定路径。像这样说:
"C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE"
"c:\MyCoolApp\Invoice.accDB" /decompile
现在,当您 运行 以上时,您真的不能让任何启动表单或代码 运行。 (按住 shift 键。现在退出 access/application。现在 re-launch(启动时再次没有代码到 运行)。
现在,此时我强烈推荐 Compact+ Repair(再次没有启动或代码到 运行)。所以即使是C+R,也得按住shift键
如果您在反编译期间启动应用程序,然后 C+R 允许任何代码 运行,那么您必须在第一个反编译步骤重新开始。
好的,现在你完成了 C+R。现在 ctrl-g,现在 debug-compile。