VBA以编程方式突破所有错误

时间:2016-05-05 11:33:19

标签: excel vba excel-vba

我想要做的是设置一个标志来从这个选项: enter image description here

到这个选项:

enter image description here

原因是我在整个代码中都有错误处理程序,而我在调试时希望能够看到错误是什么。

关闭错误标志:

On Error GoTo 0

我会回到最后一个地方使用错误处理,比如在我工作之前的两三个程序

3 个答案:

答案 0 :(得分:4)

您没有说明您使用的是哪个VBA环境。在Access中(据我所知,在Access中仅 ),有一种非常有用的方法可以编程方式修改错误陷印设置:

Application.SetOption("Error Trapping", 2) 
Debug.Print Application.GetOption("Error Trapping") 

我已经多次使用过这种方法,我在外部方法上设置了错误处理,但是我真的想看看代码在调用堆栈中的某个地方遇到错误的位置。如果您在代码中的某处有预期的,处理良好的错误,那么全局将错误陷阱设置为“中断所有错误”是一件痛苦的事情,因为它总是停留在那些错误上!因此,在Access中,您可以根据需要在一个部分中切换到“Break on All Errors”。

答案 1 :(得分:2)

我知道这个问题很旧,但是为需要在Excel VBA中执行此操作的任何人添加了答案。我有一个为公司开发的外接程序,它使用以下技术:

  1. 使用注册表项检查不必要的错误捕获选项(此示例中的“对所有错误都破坏”)
  2. 根据需要更改注册表项
  3. 重新启动Excel(我将这一部分设为手动,但是您可以根据情况自动执行)
CREATE TABLE table_name ( rw, grp, vol ) AS
SELECT  1, 'A', 1 FROM DUAL UNION ALL
SELECT  2, 'A', 2 FROM DUAL UNION ALL
SELECT  3, 'A', 3 FROM DUAL UNION ALL
SELECT  4, 'A', 4 FROM DUAL UNION ALL
SELECT  5, 'A', 2 FROM DUAL UNION ALL
SELECT  6, 'A', 3 FROM DUAL UNION ALL
SELECT  7, 'A', 4 FROM DUAL UNION ALL
SELECT  8, 'A', 5 FROM DUAL UNION ALL
SELECT  9, 'A', 5 FROM DUAL UNION ALL
SELECT 10, 'A', 6 FROM DUAL UNION ALL
SELECT 11, 'A', 7 FROM DUAL UNION ALL
SELECT 12, 'A', 3 FROM DUAL UNION ALL
SELECT 13, 'A', 4 FROM DUAL UNION ALL
SELECT 14, 'A', 5 FROM DUAL UNION ALL
SELECT 15, 'A', 4 FROM DUAL;

注意:Excel仅在打开时读取注册表,而仅在关闭时写入。这就是为什么需要重新启动应用程序的原因。

  • 0是未处理错误的中断
  • 1是所有错误中断
  • 2是班级模块中断

答案 2 :(得分:1)

根据评论,没有一种简单的方法可以做到这一点,除了手动更改选项中的设置,当你到达想要产生运行时错误的代码部分而不是被带到最后一个活动错误处理程序。