VBA关于错误声明|处理错误的三种主要方法
Excel VBA错误声明
VBA发生错误 语句是一种错误处理机制,用于指导代码在遇到任何类型的错误时如何执行操作,通常在代码遇到错误时,执行会停止执行,但是在代码中使用此语句后,代码的执行会继续执行当遇到错误时,它具有一组要执行的指令。
预期代码中的错误会使您成为VBA编码专家。即使您对代码有一种或另一种方式可能会引发错误的信心,也无法使代码100%高效。
识别和处理各种错误几乎是不可能完成的任务,但是我们在VBA中使用不同的方法来处理错误。在编写代码时,您可能不会预期会出现哪种错误代码,但是如果出现任何错误,您将花费更多的时间在调试上,而不是编写代码本身。
什么是错误?
错误无非是因为功能或错误的代码而无法执行一行代码。因此,请尝试预期错误并进行处理。
例如,如果您尝试删除不存在的工作表,则显然我们无法执行该行代码。
错误有三种类型,一种是由于未声明变量而导致的编译错误。第二个是由于编码器输入错误而导致的数据输入错误,第三个是由于VBA无法识别代码行而导致的运行时错误。用于尝试访问或处理不存在的工作表或工作簿。
但是我们在VBA中有一条语句可以处理所有这些类型的错误,即“ On Error”语句。
错误说明的类型
在VBA中处理错误的关键是“ On Error”语句。例如,出现错误“继续下一行”,“转到或跳至另一行”等...
On Error语句具有三种语句。
- 转到0意味着无论何时发生运行时错误excel或VBA,都应在错误消息框中显示错误消息框,说明其遇到的错误类型。 VBA一旦执行代码,就会禁用该代码中该特定块中的所有错误处理程序。
- 继续下一个 意味着无论何时发生错误,此语句都会指示excel忽略该错误并继续(继续)下一行代码,而不显示任何错误消息。这并不意味着它将解决该错误,而只是忽略该错误。
- 转到[标签] 意味着只要VBA遇到错误,就转到分配的标签。这使代码跳到编码器提供的特定行。
在VBA中处理错误的3种方法
您可以在此处下载此VBA On错误模板– VBA On错误模板#1 –错误恢复后
假设您将20的值除以0,并且已经声明了变量以将除法的结果分配给该变量。
代码:
Sub OnError_Example1()昏暗i作为整数i = 20/0 End Sub
如果运行此代码,它将引发以下错误。
因此,您不能将任何数字除以零值。运行时错误号为11,即除以零。
现在,我将在代码中再添加一行。
代码:
Sub OnError_Example1()Dim i作为整数,j作为整数i = 20/0 j = 20/2 End Sub
现在,我将在顶部下面的语句中添加“错误恢复”。
代码:
Sub OnError_Example1()将i设为整数,将j设为整数(在出错时恢复)Next i = 20/0 j = 20/2 End Sub
现在,如果我执行此代码,它不会给我任何错误消息,而是执行下一行代码,即j = 20/2。
#2 –错误时转到标签
我已经声明了三个变量。
代码:
Sub OnError_Example1()以i的整数表示,以j的整数表示,以k的整数表示
对于所有这三个变量,我将分配除法计算。
代码:
Sub OnError_Example1()Dim i作为整数,j作为整数,k作为整数i = 20/0 j = 20/2 k = 10/5
这三个计算的结果将显示在消息框中。
代码:
Sub OnError_Example1()Dim i作为整数,j作为整数,k作为整数i = 20/0 j = 20/2 k = 10/5 MsgBox“ i的值为”&i&vbNewLine&“ j的值为“&j&_ vbNewLine&” k的值为“&k&vbNewLine End Sub
现在,我将尝试执行此代码,因为“ I”的计算不正确,我们将得到运行时错误11。
现在,我将添加“ On Error Resume Next”语句。
代码:
Sub OnError_Example1()将i设为整数,将j设为整数,将k设为整数(根据错误恢复)Next i = 20/0 j = 20/2 k = 10/5 MsgBox“ i的值为”&i&vbNewLine&“ The j的值为“&j&_ vbNewLine&” k的值为“&k&vbNewLine End Sub
如果执行此操作,它将跳过“ I”计算并执行其余两个计算,结果如下。
现在,我将添加“ On Error GoTo KCalculation”,而不是“ On Error Resume Next”。
代码:
Sub OnError_Example1()Dim i作为整数,j作为整数,k作为整数,在出错时GoTo KCalculation:i = 20/0 j = 20/2 KCalculation:k = 10/5 MsgBox“ i的值为”&i&vbNewLine &“ j的值为”&j&_ vbNewLine&“ k的值为”&k&vbNewLine End Sub笔记: 这里的“ KCalculation”是我给的标签名,您可以给自己的标签名加空格。
现在,如果我执行这行代码,它将不会跳到下一行,而是会跳到我输入的标签名称,即“ KCalcualtion”。在这里它将忽略“ I”给出的错误,并且将不执行“ j”计算,而是立即跳转到“ KCalcualtion”。
#3 – VBA中的打印错误号
在代码末尾,我们还可以在单独的消息框中打印错误号。下面的代码行将完成此工作。
代码:
错误号
现在,我将在运行此代码的第一个消息框显示计算结果。
单击确定,它将显示另一个消息框以显示错误号。
结果是11,即除以零。
我们还可以获取错误描述而不是数字。我们只需要更改代码,下面是代码。
代码:
错误说明
它将显示这样的描述。
要记住的事情
- 在代码末尾输入“ On Error Resume Next”后,不要忘记添加语句“ On Error GoTo 0”
- 标签名称在两个地方都应该相同。
- 标签名称不必事先定义好。
- 最后,始终通过单独的消息框查看发生了什么错误。