Ao executar códigos em VBA, nem sempre tudo sai como esperado. Por vezes erros ocorrem, e é necessário saber tratá-los.
No VBA 3 tipos de erros que podem ser encontrados:
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 ou com mouse).
Para corrigir esse erro, basta ajustar a sintaxe, observando se tudo foi digitado corretamente na ordem esperada.
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.
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.
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.
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.
TE é um nome de rótulo exemplo. É possível escolher qualquer nome para este rótulo, como se fosse um nome de variável.
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 é 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
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.
© 2024 SuperExcelVBA | SOBRE