Escolha seu idioma de preferência

VBA Tratamento de Erros


Ao executar códigos em VBA, nem sempre tudo sai como esperado. Por vezes erros ocorrem, e é necessário saber tratá-los.


Tipos de erros

No VBA 3 tipos de erros que podem ser encontrados:


Erro de Sintaxe

São erros que ocorrem quado a sintaxe de uma linha estiver incorreta.

E.g.: Instrução If sem o Then; ou erros de digitação, como Thn ao invés de Then.

Não é necessária a execução para a identificação desse tipo de erro. Normalmente o próprio VBE manda um alerta tão logo que se mude de linha (com Enter ou com mouse).

Para corrigir esse erro, basta ajustar a sintaxe, observando se tudo foi digitado corretamente na ordem esperada.


Erro de Compilação

A sintaxe das linhas está correta, mas o conjunto lógico do código apresenta alguma falha.

Exemplos:

  • Comando If dentro de um loop com End If fora do loop

    For i = 1 To 10
        'Tarefas...
        If i = 9 Then
    Next i
        End If
    

  • Comando End If depois do End Sub

    Sub exemplo()
        If i = 10 Then
    End Sub
        End If
    

Um alertar aparece quando um código com esse tipo de erro é executado.

Para lidar com esse tipo de erro usualmente basta corrigir a ordem das linhas, garantido que todo comando que precisa de uma contra partida (Ex: For, If, Sub) tenha seu fechamento antes de outro comando que também necessite de contra partida.


Erro em Tempo de Execução

Ocorre quando o programa, durante a execução, não consegue rodar uma linha de código por conta de associações indevidas ou incompatibilidades.

E.g.: 1/0 resultará em um erro 'Divisão por zero'.

Existem duas abordagens principais (que podem ser complementares) para lidar com esse tipo de erro:

A seguir, nos concentraremos no tratamento dos Erro em Tempo de Execução com a instrução On Error.


Instrução On Error

On Error é a principal forma de tratamento de "Erro em Tempo de Execução" do VBA, informando o VBA o que fazer quando um erro desse tipo for encontrado.

On Error pode ser utilizado de três maneiras:

Ao utilizar um comando On Error o VBA estabelecerá o novo padrão para lidar com os erros para as próximas linhas de código que serão executadas.

Para voltar ao padrão do Excel utilize On Error GoTo 0.


On Error GoTo <Rótulo>

Caso ocorra um erro, a execução irá pular para uma linha definida, geralmente ao final do código:

Sub ErroGoTo()

    On Error GoTo TE

    X = 1 / 0 'Causa um erro

    '
    ' Código da Sub
    '

Exit Sub
TE: 'Tratamento de Erros
    MsgBox "O Seguinte erro ocorreu: " & Err.Description
End Sub

Neste exemplo, ao detectar o erro o VBA deslocou sua execução para a linha com o rótulo (TE).

Repare que para não executar o tratamentos de erros sem que algum erro tenham ocorrido foi adicionado a instrução Exit Sub antes de TE:

A variável Err.Description conterá a descrição do motivo do erro, caso ele ocorra. Divisão por zero, neste exemplo.

Err Description

TE é um nome de rótulo exemplo. É possível escolher qualquer nome para este rótulo, como se fosse um nome de variável.


On Error Resume Next

Para continuar a execução mesmo em caso de erro, utilize o código On Error Resume Next.

    On Error Resume Next

    X = 1 / 0 'Causa um erro, porém a execução não irá parar

Caso seja necessário que X tenha um valor, isso poderá ser estabelecido da seguinte maneira.

    On Error Resume Next

    X = 1 / 0 'Causa um erro, porém a execução não irá parar

    If Err.Number <> 0 Then 
        X = 1
    End If

Repare que Err.Number retornará um número diferente de 0 caso um erro ocorra.

Sempre que utilizar a opção On Error Resume Next certifique-se que o código esteja prevendo a falta das variáveis ou das linhas que causam problemas para não tornar os resultados imprevisíveis.


On Error Goto 0

On Error Goto 0 é a opção padrão do VBA. Em caso de erro, a execução será interrompida e uma a mensagem de erro aparecerá:

    X = 1 / 0    'Causa um erro

On Error Padrão

Essa opção é geralmente especificada quando se deseja retomar a forma padrão de tratamento de erros do VBA após uma especificação anterior:

    On Error Resume Next

    X = 1 / 0 'Causa um erro, porém a execução não irá parar

    If Err.Number <> 0 Then 
        X = 1
    End If

    'Os erros foram contornados até aqui

    On Error Goto 0 'A partir daqui os erros serão evidenciados

    Y = 1 / 0

    'Mostrará a janela com o erro para Y


SuperExcelVBA.com é um site voltado ao aprendizado de VBA. Exemplos e explicações podem ter sido simplificados para maior e mais veloz compreensão. Estamos constantemente nos atualizando e corrigindo erros, porém não existe garantia sobre o conteúdo disponível no site. Todos os direitos reservados.

Excel ® é uma marca registrada da Microsoft Corporation.

© 2019 SuperExcelVBA | SOBRE

Protected by Copyscape