出错时继续下一步:在Excel VBA中处理错误

  • Share This
Hugh West

在Microsoft Excel VBA中,错误处理是关键任务之一。 如果你是一个程序员,你知道错误处理对建立一个完美的应用程序的重要性。 语句中的任何错误都会在很多方面妨碍你的VBA代码。 因此,你必须在执行VBA代码时谨慎地处理这些错误。 在Excel中使用VBA代码时,你可能面临很多运行时错误。 为了解决之一,我们用 出错时恢复下一步 声明。

在本教程中,你将学习如何使用 出错时恢复下一步 本教程将通过适当的例子和适当的插图来说明问题。 因此,请继续关注我们。

下载实践工作手册

VBA在错误时恢复下一步.xlsm

Excel VBA中的错误处理

在使用Microsoft Excel VBA时,你会在子程序中面临很多错误。 当VBA不能执行一个语句时,它会抛出一个运行时错误。

Excel会自动处理这些错误,所以当运行时错误出现时,它会显示一个默认的错误信息,如下所示。

现在,你可以通过一些VBA语句来处理这些问题。 我将在后面的章节中讨论它们。

阅读更多。 如何修复Excel中的#REF!错误(6种解决方案)

关于VBA中的错误语句

为了处理运行时的错误,我们用On Error语句来指示Excel。 它决定了我们接下来要立即做什么样的操作。 基本上,我们通过这几种错误处理方式来禁用这些错误。

我们在Excel VBA中使用三种On Error语句(语法)。

  • 错误时转到 线
  • 出错时恢复下一步
  • 错误时转到0

当你发现一个错误时,使用On Error命令。 因为如果你不利用一个 错误时 声明,那些运行时错误将是灾难性的。 它将显示一个错误提示并停止执行。

当我们使用一个 错误时 语句,我们开启了一个 "启用的 "错误处理程序。 启用的 "错误处理程序是一个启用的处理程序,它启动了错误处理操作。 如果在错误处理程序的时候出现了错误,当前方法的错误处理程序就不能忍受这个错误。 之后,控制权返回到调用程序。

如果调用程序有一个启用的错误处理程序,它就会被触发来管理这个错误。 如果你的调用系统的错误处理程序相应地参与了,控制权就会通过先前的调用程序回馈,直到它找到一个启用但不活动的错误处理程序。 如果它找不到任何空闲的启用的错误处理程序,这意味着这个错误在其发生点是灾难性的。

每当错误处理程序将权限交还给调用程序时,该程序就会演化出现有的程序。 在当前程序中的执行在由 简历 当一个错误处理程序处理任何过程中的错误时,使用 "声明"。

VBA中的 "On Error Resume Next"(错误时恢复下一步)。

现在 出错时恢复下一步 语句告诉VBA忽略任何有错误的代码行,并立即进行下一行代码。 之后,Excel VBA代码将跳过含有错误的一行或几行,并继续进行下面的代码序列。

ǞǞǞ 出错时恢复下一步 语句强制恢复执行,并立即执行引起运行时错误的那一行代码。 即使存在运行时错误,该语句也允许跳过执行。 如果你认为某一行代码可能会产生错误,请将错误处理程序放在那里,而不是放在程序的其他位置。 出错时恢复下一步 语句会在你的代码调用另一个程序时变得空闲。 因此,当你需要在该例程中进行匹配的错误处理时,你必须运行一个 出错时恢复下一步 命令在每个命名的模式中。

当你可以跳过的那行代码对宏的蓬勃发展没有必要时,这是合理的。 但请记住,如果你不正确地使用它,它可能会带来意想不到的结果,是有害的。

请记住。

On Error Resume Next 语句并不能解决运行时错误。 它基本上忽略了错误,你的VB执行将从产生运行时错误的语句开始恢复。

看一下下面的代码。

 Sub divide() MsgBox 5 / 0 MsgBox 5 / 2 End Sub 

我们尝试用0和1除以5,让我们运行代码。 它将显示以下输出。

它产生了一个运行时错误。 我们不能用一个数字除以0。 当你调试代码时,你会看到以下情况。

当VB程序发现一个错误时,它立即停止该程序。 它没有执行下面一行。

现在,让我们来实现 出错时恢复下一步 语句在错误语句之前。

 Sub divide() On Error Resume Next MsgBox 5 / 0 MsgBox 5 / 2 End Sub 

运行该代码后,你会看到以下内容。

正如你所看到的,VBA忽略了产生错误的那一行,并立即进行下一行代码。 这样,你可以使用 出错时恢复下一步 语句来处理Excel VBA中的错误。

VBA中 "On Error Resume Next "的例子

在下面的章节中,我将为你提供两个例子。 出错时恢复下一步 语句,你可以用VBA实现你的Excel工作表。 我建议你学习并将这些都应用到你的工作簿中。 这肯定会增加你的Excel知识。

1. "出错时恢复下一步 "语句,以隐藏工作表

现在,在这个例子中,我将向你展示一个VBA代码,它将隐藏你活动工作簿的所有工作表。

请看下面的截图。

在这里,我们有四个工作表,我们将使用下面的VBA代码隐藏所有的工作表。

 Sub hide_all_sheets() Dim copies As Worksheet For Each copies In ActiveWorkbook.Sheet 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代码中工作得非常好。

阅读更多。 Excel中的错误及其含义(15种不同的错误)

2.VBA中带有 "On Error Resume Next "的VLOOKUP函数

在这个例子中,我将展示一个关于 VBA中的VLOOKUP函数 现在,这个VBA代码还包括 出错时恢复下一步 声明。

请看下面的截图。

在这里,你可以看到一些人的名字和他们的年龄。 在旁边的表格中,我们将使用 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 之后,它停止执行。 现在,如果你想忽略这个错误,继续寻找其余的年代,可以使用 出错时恢复下一步 声明。

 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代码后,你会看到以下输出。

正如你所看到的,通过应用 出错时恢复下一步 命令,我们忽略了这个错误并找到了其余的人的年龄。 我们的VBA代码没有找到Aaron和Emma的任何数据。 这就是为什么它忽略了这些值并在Excel工作表中返回其余的值。

阅读全文:[修复]Excel发现此工作表中的一个或多个公式引用有问题

用Excel VBA关闭 "出错时恢复下一步 "功能

现在,你可能会遇到这样的情况:你想忽略VBA代码中某个特定片段的错误。 记住,如果你在VBA代码中使用On Error Resume Next语句,它将跳过之后的所有错误。 现在,如果你想关闭它,并启用另一个片段的错误处理,使用 错误时转到0 它将再次启用错误处理。

通用的用法。

Sub error_handling()

忽略错误

出错时恢复下一步

//几行代码

要打开错误处理

错误时转到0

//代码的行数

结束子

看一下下面的VBA代码。

 Sub error_handling() 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 ' to turn off on error resume next On Error GoTo 0 MsgBox i / 0 End Sub 

我们将之前的代码用于 VLOOKUP 这里添加了一段额外的代码来演示。 我们的代码将忽略错误,同时执行 VLOOKUP 但是,它将在以下情况下激活错误处理 错误时转到0 声明。

阅读更多。 Excel VBA:关闭 "出错时恢复下一步 "的功能

VBA "On Error GoTo

之前我讨论了使用On Error方法处理错误。 我们整个文章都是关于 出错时恢复下一步。 现在,还有两种类型的错误处理,我将在以下章节中讨论。

1.VBA在错误时转到0

ǞǞǞ 错误时转为0 语句是Excel的内置设置,如果你的代码中没有错误处理程序的话。 它基本上意味着,当VBA发现一个错误时,以 错误时转到0 ,它将停止运行代码并显示其传统的错误信息框。

错误时转到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 

我们已经向你展示了这段代码。 这段代码基本上隐藏了你当前工作簿中的所有工作表。 现在,我确实有一段额外的代码与 错误时转到0 如果你运行该代码,你会看到以下内容。

它显示这个错误是因为我们在活动工作簿中不能有同名的工作表。

2.VBA在错误时转到行

现在,你也可以指示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 "也有一个具有相同名称的工作表。 试试别的。" End Sub 

你在前面的例子中看到了这个代码。 当我们用 错误时转到0 但在这里,我们将其替换为 出错时转到行 声明。

现在,运行该代码,你会看到以下内容。

正如你所看到的,它没有向我们显示标准的错误对话框。 相反,它显示了我们在 "我的 "中创建的自定义消息框。 错误处理程序 当Excel发现任何错误时,它会跳到 错误处理程序 段,并向我们展示了信息框。

我们还使用了一个 退出子系统 如果在程序中没有名为""的工作表。 VLOOKUP "我们的VBA代码将重命名活动工作表。 然后,我们必须在这里完成执行,因为我们不需要继续进行错误处理和显示消息框。

VBA "出错时 "在Excel中不工作

有时,无论你如何努力,On Error方法都不会起作用。 以前,我们实现了 错误时 方法来处理错误。 但是,有时会显示错误,即使你使用了 出错时恢复下一步 错误时转到0 你的代码中可能有几个原因需要修正。 我不打算告诉你。

VBA的基本原因是' 在错误中'。 在Excel中不工作是在Excel中打开 "在所有错误上断开 "选项。

按照这些步骤来解决这个问题。

📌 阶梯

  • 首先,按 Alt+F11 在你的键盘上按一下,打开VBA编辑器。
  • 现在,点击 工具> 选项。

  • 之后,点击 一般 中的选项卡。 选择 对话框。

  • 在这里,你可以看到," 在所有错误上断开 "它基本上可以防止你处理这些错误。
  • 要改变它,选择""选项。 在未处理的错误上中断 ",并点击 认可 .

我希望它能解决你的VBA "出错时 "在Excel中不工作的问题。

阅读更多。 Excel中NAME错误的原因和纠正(10例)

💬 需要记住的事情

✎ 错误时恢复下一步 它基本上忽略了这个错误,并继续进行下一个语句。

Excel在Err对象中捕获并存储运行时的错误。 当我们使用 出错时恢复下一步 语句,它清除了Err对象的属性。

你可以关闭 出错时恢复下一步 在Excel的VBA代码中,通过添加 错误时转到0 声明。

总结

最后,我希望本教程为你提供了一个有用的知识,以使用 出错时恢复下一步 我建议你学习并在你的数据集上应用所有这些说明。 下载练习工作簿并自己尝试这些。 此外,请随时在评论区提出反馈意见。 你的宝贵反馈使我们有动力创建这样的教程。

不要忘记查看我们的网站 独家专访 遇到各种与Excel有关的问题和解决方案。

不断学习新方法,不断成长!

Hugh West is a highly experienced Excel trainer and analyst with over 10 years of experience in the industry. He holds a Bachelor's degree in Accounting and Finance and a Master's degree in Business Administration. Hugh has a passion for teaching and has developed a unique teaching approach that is easy to follow and understand. His expert knowledge of Excel has helped thousands of students and professionals worldwide improve their skills and excel in their careers. Through his blog, Hugh shares his knowledge with the world, offering free Excel tutorials and online training to help individuals and businesses reach their full potential.