2014-10-20 95 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