错误处理和错误对象

时间:2017-03-17 13:53:19

标签: excel vba excel-vba

在vba中进行编码时,我注意到当我们预期出现错误然后写入“on next resume next”时。当错误确实发生时,错误值将增加到1。 下面是一个简单的示例代码。

Dim ws as worksheets
    On error resume next 
     Set ws = sheets("hellosheet")  ' hellosheet doesn't exist 
      If err <> 0 then
        Msgbox "the worksheet hellosheet doesn't exist"
      End if

正如您所见,hellosheet不存在,导致代码出错。将这部分中的错误值增加到1.如果我遗漏某些内容,请帮助我理解逻辑。 谢谢

2 个答案:

答案 0 :(得分:1)

Excel有数百个(如果不是数千个)不同的错误。 MS具有所有编号和编目,并且每个都有编号和描述。

true

您可以指定发生错误时代码应执行的操作。我们的想法是将代码引导到错误处理代码,该代码检查它是什么类型的错误以及如何处理它。例如,如果您尝试打开的工作表不存在,您可能希望代码创建它并继续使用该工作表,就像没有发生错误一样。

处理错误的另一种方法是使用

Err.Number
Err.Description

在下一行,您可能会进行测试,例如

On Error Resume Next

这对于创建一张发现缺失的工作表非常完美,但您可能希望测试它确实发生了错误。

发生错误后,您可能需要使用命令Err.Clear,然后再对是否发生错误进行下一次测试,因为Excel将记住第一个,您告诉它继续执行下一个命令。

答案 1 :(得分:0)

在这种情况下,错误编号实际上是9;但是,除非您将其硬编码为下一行,否则您不会在Resume Next上获得类似的消息框。虽然有些情况下Resume Next是您想要做的事情,但在您的情况下,您需要实际捕获错误。这将需要以不同的方式设置它。

Private Sub()
Dim ws as Worksheet
On Error GoTo There_is_an_Error
Set ws = Sheets("HelloSheet")
<other code>

Exit_There_is_an_Error:
Exit Sub

There_is_an_Error:
MsgBox "The Worksheet doesn't exist!"
Resume Exit_There_is_an_Error
End Sub