网站搜索

错误继续下一步:处理 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 语句。


相关文章