Я читал эту ветку об обработке ошибок, но когда я пытаюсь воспроизвести даже простой сценарий управления ошибками, это не сработает. Я пытаюсь запустить следующий модифицированный код из одного из примеров:

Sub Example()
    Dim n As Variant

    On Error GoTo nx

    For i = 1 To 10
        n = 1 / 0 'this WILL cause an error.
    label1:
    Next i

Exit Sub

    nx:
    n = 5
    Resume label1

End Sub

Код выглядит хорошо, но когда я действительно запускаю его, я получаю run-time error 11: division by zero во всплывающем окне.

Может ли кто-нибудь помочь мне понять это или указать мне правильное направление?

3 ответа3

1

Код работает нормально для меня и не выдает никаких ошибок. Я даже прошел по ней построчно, используя отладчик, и ничего плохого не произошло.

Как незначительный момент, я нахожу следующую альтернативу намного более понятной для понимания:

Sub Example()

    Dim n As Variant

    On Error Resume Next

    For i = 1 To 10
        n = 1 / 0 'this WILL cause an error.
        If Err.Number <> 0 Then n = 5
    Next i

    On Error GoTo 0

End Sub

Однако это всего лишь личные предпочтения.

0

Я наконец понял, в чем проблема, когда читал эту ветку. В меню параметров мои настройки были установлены по умолчанию на "Разрыв всех ошибок" вместо "Разрыв необработанных ошибок". Достаточно простое исправление, но у меня все еще есть другая проблема, связанная с тем, что мой Excel разбил любой экземпляр err.[arg] . Я получаю Compile error: Expected Function or Variable . Кто-нибудь может мне с этим помочь?

-1

Вы код перехватывает ошибку, а затем просто продолжает идти. Попробуйте вот так, и, возможно, вы увидите немного лучше, что с этим происходит:

Sub Example()
Dim n As Variant

On Error GoTo nx

For i = 1 To 10
    n = 1 / 0 'this WILL cause an error.
    label1:
        Next i

Debug.print "loop done"

Exit Sub

nx:
    Debug.print "error called", i
    n = 5
    Resume label1

End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .