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

'Set WS = Nothing' не должен действительно быть там all..'LoopErrorHandling_Exit' есть в этом необходимому фрагменте кода (* потому что нет' Выход Sub' где-нибудь до меток *).'LoopErrorHandling_Exit:' - это метка, в которую будет сказываться код, когда запускается 'LoopErrorHandling_Exit' или когда выполняется нормальное выполнение кода, которое находится после каждого цикла, потому что нет' Exit Sub' –

+3

, вы обязательно должны видеть [ЭТО СТАТЬЯ] (http://www.cpearson.com/excel/errorhandling.htm) –

+0

@ vba4all: Извините, не просмотрел твой комментарий –

ответ

4

Если линия 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 заботится об этом, и он возобновляет выполнение в соответствующей точке кода. Это также помогает вам сбросить все события. Например, вы можете увидеть 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

Смежные вопросы