kam*_*ami 4 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
Run Code Online (Sandbox Code Playgroud)
我想在上面的代码中补充以下内容。
Set ws = Nothing之前还是之后
LoopErrorHandling_Exit:。LoopErrorHandling_Err:不够,是
LoopErrorHandling_Exit:必要的。LoopErrorHandling_Exit:上面的代码行的工作是什么,它仅在发生错误时才触发。行Set ws =应该在LoopErrorHandling_Exit行之后还是之前什么都没有:
由于您是在Excel中进行工作的,因此该行不是必需的,因为Excel会清理对象。但是,清理对象是个好习惯。我称它为使用后冲洗厕所:P这样,当您从Excel中使用其他应用程序时,默认情况下您会记得这样做:)
顺便说一句,它应该紧随其后,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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
415 次 |
| 最近记录: |