2014-10-20 133 views
4

我得到下面的代碼。我想了解在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或缺少東西。
+0

'設置WS = Nothing'真的不應該在那裏的all..'LoopErrorHandling_Exit'是neccessary在這個片段中(*因爲沒有'退出Sub'標籤*之前的任何地方)。'LoopErrorHandling_Exit:'是當'LoopErrorHandling_Exit'被觸發或者當正常代碼執行到達每個循環之後代碼將跳轉到的'label',因爲沒有'Exit Sub' – 2014-10-20 09:41:01

+3

你應該看到[THIS ARTICLE](http://www.cpearson.com/excel/errorhandling.htm) – 2014-10-20 09:45:53

+0

@ vba4all:對不起,沒有看到您的評論 – 2014-10-20 09:52:51

回答

4

應行集WS =後或行LoopErrorHandling_Exit之前沒有現身:

因爲你是在Excel中工作,該行是沒有必要像Excel將清理對象。不過,清理對象是一種很好的做法。我把它叫做沖洗廁所使用後:P這樣,當你從Excel中其他應用程序的工作,你會被默認記得做吧:)

BTW,它應該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 
+0

非常感謝Siddarth的解釋。神奇的圖。 – kami 2014-10-20 14:07:00