簡體   English   中英

了解Excel VBA錯誤處理

[英]Understanding Excel VBA Error Handling

我的代碼如下。 我試圖了解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 = NothingLoopErrorHandling_Exit:行之前或之前Set ws = Nothing
  • 不應該行LoopErrorHandling_Err:夠了,是LoopErrorHandling_Exit:必要的。
  • LoopErrorHandling_Exit:的工作是什么LoopErrorHandling_Exit:在上面的代碼中,只有在出現錯誤時它才會觸發。
  • 以上代碼是否涵蓋了excel vba中所需的錯誤處理或缺少的東西。

應該行Set Ws =在LoopErrorHandling_Exit行之前或之前沒有任何內容:

由於您在Excel中工作,因此Excel不需要該行,因為Excel將清理對象。 但是,清理對象是一種很好的做法。 我稱之為在使用后沖洗馬桶 :P這種方式當您使用Excel中的其他應用程序時,您將默認記得這樣做:)

順便說一句,它應該在LoopErrorHandling_Exit:之后LoopErrorHandling_Exit:所以當代碼遇到錯誤時, LoopErrorHandling_Exit:將處理它。 忘記Set ws = Nothing ,您可以重置該部分中的其他事件。 我在帖子的后面部分中包含了一個鏈接,用於演示。

不應該行LoopErrorHandling_Err:夠了,是LoopErrorHandling_Exit:必要的。 行LoopErrorHandling_Exit的工作是什么:在上面的代碼中,只有在出現錯誤時它才會觸發。

是的,這是必需的。 您不希望MsgBox Err.Description在正常代碼執行下運行。 Resume語句處理它並在代碼中的相關點恢復執行。 它還可以幫助您重置任何特定事件。 例如,您可能希望看到此鏈接

在此輸入圖像描述

以上代碼是否涵蓋了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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM