错误继续下一步:处理 Excel VBA 中的错误
方法 1 – 在 Excel VBA 中使用错误 Resume Next 语句隐藏工作表
这是一个 VBA 代码,它将隐藏活动工作簿的所有工作表。
看下面的截图:

使用以下 VBA 代码隐藏所有内容:
Sub hide_all_sheets()
Dim copies As Worksheet
For Each copies In ActiveWorkbook.Sheets
copies.Visible = False
Next copies
End Sub当您执行以下代码时,您将看到此运行时错误:

Excel 显示此错误是因为您无法隐藏工作簿中的所有工作表。忽略这个错误。您必须在代码行中实现On Error Resume Next语句。
Sub hide_all_sheets()
Dim copies As Worksheet
On Error Resume Next
For Each copies In ActiveWorkbook.Sheets
copies.Visible = False
Next copies
End Sub完成 VBA 代码的执行后,您将看到以下输出:

执行后,你不会看到任何错误。此 On Error Resume Next 语句在 VBA 代码中运行良好。
方法 2 – 在 VBA 中应用 Excel VLOOKUP 函数和“On Error Resume Next”
这是 VBA 中 VLOOKUP 函数的示例。此 VBA 代码还包含 On Error Resume Next 语句。
看看下面的截图:

您可以看到一些人的姓名和年龄。在相邻的表中,使用VLOOKUP查找此人的姓名和年龄。
输入以下代码来执行此操作:
Sub VLOOKUP_Function()
Dim i As Long
For i = 5 To 9
Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0)
Next i
End Sub
运行宏。您将看到以下错误:

这是一个运行时错误。

没有“Aaron”和“Emma”的数据。这就是为什么它只对第一个条目执行VLOOKUP。它停止执行。如果您想忽略该错误并继续查找其余年龄,请使用On Error Resume Next语句。
Sub VLOOKUP_Function()
Dim i As Long
On Error Resume Next
For i = 5 To 9
Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0)
Next i
End Sub运行 VBA 代码后,您将看到以下输出:

通过应用On Error Resume Next命令,我们忽略了错误并找到了其余人的年龄。 VBA 代码没有找到有关 Aaron 和 Emma 的任何数据,因此它忽略这些值并在 Excel 工作表中返回其余内容。
使用 Excel VBA 关闭“出错时继续下一步”
您可能会遇到这样的情况:您想要忽略 VBA 代码特定段的错误。如果您在 VBA 代码中使用 On Error Resume Next 语句,它将跳过此后的所有错误,如果您想关闭该错误并启用另一个段的错误处理,请使用 On Error GoTo 0。它将再次启用错误处理。
通用用法:
子错误_处理()
忽略错误
出错时继续下一步
// 代码行数
打开错误处理
出错时转到 0
//代码行数
结束子
看一下下面的 VBA 代码:
Sub error_handling()
Dim i As Long
'to ignore error
On Error Resume Next
For i = 5 To 9
Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0)
Next i
'to turn off on error resume next
On Error GoTo 0
MsgBox i / 0
End Sub我们之前使用了 VLOOKUP 函数的代码。我们的代码在执行 VLOOKUP 时会忽略错误,但会在On Error GoTo 0 之后激活错误处理>声明。

VBA“On Error GoTo”语句
方法 1 – VBA 出错时转到 0
如果您的代码没有错误处理程序,则 On Error GoTo 0 语句是 Excel 的内置设置。它基本上意味着,当 VBA 发现 On Error GoTo 0 错误时,它将停止运行代码并显示其传统的错误消息框。
On Error GoTo 0 语句关闭当前过程中的错误处理。它没有将第 0 行定义为错误处理代码的开头,即使该方法包含编号为 0 的行。
看一下下面的代码:
Sub on_error_goto_0()
Dim copies As Worksheet
On Error Resume Next
For Each copies In ActiveWorkbook.Sheets
copies.Visible = False
Next copies
On Error GoTo 0
ActiveSheet.Name = "Copy-4"
End Sub此代码隐藏当前工作簿中的所有工作表。我们有一段额外的代码,其中包含 On Error GoTo 0 来显示错误。如果运行代码,您将看到以下内容:

此错误是由于活动工作簿中不能存在同名工作表而导致的。
方法 2 – VBA On Error GoTo 行
如果 Excel 发现任何错误,您还可以使用On Error GoTo 行指示 Excel 运行另一个代码段。它告诉 Excel 在发现错误后执行某些操作。
行参数是任何行标记或行号。如果我们的代码导致任何运行时错误,它将移至该行,从而导致错误处理程序在执行中处于活动状态。您定义的行必须遵循 On Error 语句的确切过程;否则会导致编译错误。
看一下下面的代码:
Sub on_error_goto_line()
Dim copies As Worksheet
On Error Resume Next
For Each copies In ActiveWorkbook.Sheets
copies.Visible = False
Next copies
On Error GoTo error_handler
ActiveSheet.Name = "Copy-4"
Exit Sub
error_handler:
MsgBox "There is also a sheet with the same name. Try a different one."
End Sub我们使用了On Error GoTo 0,这导致了错误。我们将其替换为 On Error GoTo line 语句。
运行代码,您将看到以下内容:

它不显示标准错误对话框。相反,它显示我们在 error_handler 段中创建的自定义消息框。当 Excel 发现错误时,它会跳转到 error_handler 段并向我们显示消息框。
我们还在该过程中使用了Exit Sub。如果没有“VLOOKUP”工作表,我们的 VBA 代码将重命名活动工作表。我们必须在这里完成执行,因为我们不需要继续执行错误处理程序并显示消息框。
VBA“出错”在 Excel 中不起作用
步骤
- 按键盘上的 Alt+F11 打开 VBA 编辑器。
- 单击工具>选项。

- 点击选项对话框中的常规标签。

- 当选中“Break on All Errors”时,它会阻止您处理错误。
- 要更改它,请选择“因未处理的错误而中断”,然后单击确定。

我希望它能解决您的 VBA“On Error”在 Excel 中不起作用的问题。
要记住的事情
✎ On Error Resume Next,它不会修复错误。它忽略错误并继续执行下一条语句。
✎ Excel 捕获运行时错误并将其存储在 Err 对象中。当我们使用On Error Resume Next语句时,它会清除 Err 对象属性。
✎ 您可以通过添加 On Error GoTo 0 语句来关闭 Excel VBA 代码中的 On Error Resume Next 语句。