VBA出现错误,转到0 |如何在Excel VBA中使用On Error GoTo 0?

Excel VBA出现错误,转到0

VBA出现错误,转到0 是一个错误处理程序语句,用于禁用该过程中已启用的错误处理程序。它被称为“错误处理程序禁用器”。

任何一种编程语言中的错误处理都是所有编码人员都需要理解的主类。 VBA编程语言也是如此,我们在该编程语言中也具有错误处理技术。“ On Error Resume Next”启用错误处理程序,“ On Error GoTo 0”将禁用已启用的错误处理程序。

“ On Error Resume Next”和“ On Error GoTo 0”都是为了提高代码效率而需要串联使用的对。为了处理错误,我们需要从“ On Error Resume Next”语句开始,并且要结束该错误处理程序,我们需要使用“ On Error GoTo 0”语句。

这些语句之间编写的任何行代码都将忽略程序中发生的任何类型的错误。

如何使用On Error GoTo 0语句?

您可以在此处下载此VBA On Error Goto 0 Excel模板– VBA On Error Goto 0 Excel模板

例如,请看下面的代码。

代码:

 Sub On_ErrorExample1()工作表(“ Sheet1”)。选择范围(“ A1”)。值= 100工作表(“ Sheet2”)。选择范围(“ A1”)。值= 100 End Sub 

上面的代码所做的是,它将首先选择名为“ Sheet1”的工作表,并在单元格A1中插入值100。

代码:

工作表(“ Sheet1”)。选择范围(“ A1”)。值= 100

然后,它将选择名为“ Sheet2”的工作表并插入相同的值。

代码:

工作表(“ Sheet2”)。选择范围(“ A1”)。值= 100

现在,我的工作簿中有以下表格。

没有名为“ Sheet1”和“ Sheet2”的工作表,当我们运行代码时,它将遇到如下错误。

由于没有名为“ Sheet1”的工作表,因此遇到“下标超出范围”错误。为了处理该错误,我将在宏的顶部添加一个错误处理程序语句“ On Error Resume Next”。

代码:

 Sub On_ErrorExample1()发生错误时恢复下一个工作表(“ Sheet1”)。选择范围(“ A1”)。值= 100工作表(“ Sheet2”)。选择范围(“ A1”)。值= 100 End Sub 

现在运行代码,看看会发生什么。

它不会给出任何错误消息,因为错误处理程序语句 关于错误继续 已启用。

想象一下这样一种情况:在工作表“ Sheet1”不可用的情况下,我们需要忽略该错误,但是我们需要通知是否没有名为“ Sheet2”的工作表。

由于我们已经添加 关于错误继续 在顶部,它已开始处理该错误,但与此同时,我们需要指定需要忽略多少行。

在此示例中,我们只需要忽略第一个工作表的错误,但是对于第二个以后的工作表,如果没有工作表“ Sheet2”,则需要发生错误。因此,在第一个工作表代码之后,添加了错误禁用行On Error GoTo 0。

代码:

 Sub On_ErrorExample1()打开错误时恢复下一个工作表(“ Sheet1”)。选择范围(“ A1”)。Value = 100错误时转到0工作表(“ Sheet2”)。选择范围(“ A1”)。Value = 100 End Sub 

现在,按F8键逐行运行代码以查看影响。

现在,如果按F8键,则代码执行将跳到下一行,并且将执行活动的行任务。现在活动行(黄色行)是“ On Error Resume Next”错误处理程序,错误处理程序将被启用。

现在,任何发生的错误都将被忽略,直到执行错误处理程序禁用代码“出错时转到0“ 陈述。

在上一次尝试中,我们遇到了错误,但是再按一次F8键可以看到魔术。

即使没有工作表“ Sheet2”可供选择,它也不会给出任何类型的错误,而是恢复了代码的执行。现在再次按F8。

由于没有Sheet1,因此无法在A1单元格中将值插入为500,但是它将在工作表处于活动状态的情况下将值500插入到A1单元格中。我执行代码时的活动工作表为“ Sheet3”,因此将值100插入到单元格A1中。

现在有效的代码行是“出错时转到0”,则按F8键将执行该行任务。

由于执行了“ On Error GoTo 0”,它已经停止了错误处理过程,并且再次开始显示错误(如果发生任何错误)。按F8键,然后看到错误。

在没有On Error GoTo 0的前一种情况下,它也忽略了该错误,但是由于我们添加了错误处理程序禁用器,因此它开始再次显示该错误。

这里要记住的事情

  • “错误恢复下一个”和“错误恢复到0”都需要用作“错误处理程序启动器“ 和 ”错误处理程序禁用器”.
  • 这两个语句之间的任何代码行都遇到错误,将被忽略。
  • 如果存在On Error GoTo 0语句,则子过程错误处理程序退出后将被禁用。