了解Excel VBA错误处理

时间:2014-10-20 09:32:57

标签: excel vba excel-vba

我的代码如下。我试图了解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:的工作是什么? 只有在出现错误时它才会触发。
  • 以上代码是否涵盖了Excel中错误处理所需的所有内容 vba或是否有遗失的东西。

1 个答案:

答案 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

enter image description here

  
    

上面的代码是否涵盖了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