在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.如果我遗漏某些内容,请帮助我理解逻辑。 谢谢
答案 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