我的代码如下。我试图了解excel VBA中的错误处理。
Sub LoopErrorHandling()
Dim ws As Worksheet
Dim c As Range
On Error GoTo LoopErrorHandling_Err
Set ws = ThisWorkbook.Worksheets(1)
ws.Range("C1:C5").ClearContents
For Each c In ws.Range("A1:A5").Cells
c.Offset(0, 2).Value = c.Value / c.Offset(0, 1).Value
Next c
LoopErrorHandling_Exit:
On Error Resume Next
Set ws = Nothing
On Error GoTo 0
Exit Sub
LoopErrorHandling_Err:
MsgBox Err.Description
Resume Next
Resume LoopErrorHandling_Exit
End Sub
我想在上面的代码中理解以下内容。
Set ws = Nothing
应该在行之前还是行之前
LoopErrorHandling_Exit:
。LoopErrorHandling_Err:
就行了,是
LoopErrorHandling_Exit:
必要。LoopErrorHandling_Exit:
的工作是什么?
只有在出现错误时它才会触发。答案 0 :(得分:5)
行Set Ws =在行LoopErrorHandling_Exit之后或之前没有任何内容:
由于您在Excel中工作,因此Excel不需要该行,因为Excel将清理对象。但是,清理对象是一种很好的做法。我称之为在使用后冲洗马桶:P这样当您使用Excel中的其他应用程序时,您将默认记住这样做:)
顺便说一句,它应该在LoopErrorHandling_Exit:
之后,以便当代码遇到错误时,LoopErrorHandling_Exit:
会处理它。忘记Set ws = Nothing
,您可以重置该部分中的其他事件。我在帖子的后面部分中添加了一个链接,用于演示。
不应该循环LoopErrorHandling_Err:够了,LoopErrorHandling_Exit:必需。 行LoopErrorHandling_Exit的工作是什么:在上面的代码中,只有在出现错误时它才会触发。
是的,这是必需的。您不希望MsgBox Err.Description
在正常代码执行下运行。 Resume
语句负责处理,并在代码中的相关点恢复执行。它还可以帮助您重置任何特定事件。例如,您可能希望查看THIS LINK
上面的代码是否涵盖了excel vba中所需的错误处理或缺少的东西。
我通常会将ERL
添加到错误处理中,这样我就可以知道哪一行给出了错误。例如
Sub Sample()
10 On Error GoTo Whoa
Dim i As Long
20 i = "Sid"
LetsContinue:
30 Exit Sub
Whoa:
40 MsgBox Err.Description & " on line " & Erl
50 Resume LetsContinue
End Sub