Gerenciamento de erros do Excel VBA

0

Eu li este tópico sobre o tratamento de erros, mas quando tento replicar até mesmo um cenário simples de gerenciamento de erros que não funcionará. Estou tentando executar o seguinte código modificado em um dos exemplos:

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

O código parece bom, mas quando eu o executo, recebo run-time error 11: division by zero em uma janela pop-up.

Alguém pode me ajudar a entender isso ou me apontar na direção certa?

    
por WestWindsDemon 26.06.2018 / 16:57

3 respostas

1

O código funciona bem para mim e não gera erros. Eu mesmo andei por linha a linha usando o depurador e nada de ruim aconteceu.

Como um ponto menor, eu acho a seguinte alternativa muito mais clara para entender:

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

No entanto, isso é apenas uma preferência pessoal.

    
por 26.06.2018 / 17:13
0

Eu finalmente descobri qual era o problema, ao ler esta discussão . No menu de opções, minhas configurações foram definidas por padrão em "Interromper todos os erros" em vez de "interromper erros não tratados". Correção bastante fácil, mas ainda tenho outro problema com o meu excel quebrar com qualquer instância de err.[arg] . Eu recebo um Compile error: Expected Function or Variable . Alguém pode me ajudar com isso?

    
por 27.06.2018 / 15:54
-1

Seu código captura o erro e continua em frente. Experimente assim e talvez você veja um pouco melhor o que acontece com ele:

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
    
por 26.06.2018 / 17:37