VBA - Tratamento de Erros

Existem três tipos de erros na programação: (a) Erros de sintaxe, (b) Erros de tempo de execução e (c) Erros lógicos.

Erros de sintaxe

Erros de sintaxe, também chamados de erros de análise, ocorrem no momento da interpretação do VBScript. Por exemplo, a linha a seguir causa um erro de sintaxe porque está faltando um parêntese de fechamento.

Function ErrorHanlding_Demo()
   dim x,y
   x = "Tutorialspoint"
   y = Ucase(x
End Function

Erros de tempo de execução

Erros de tempo de execução, também chamados de exceções, ocorrem durante a execução, após a interpretação.

Por exemplo, a linha a seguir causa um erro de tempo de execução porque aqui a sintaxe está correta, mas no tempo de execução ela está tentando chamar fnmultiply, que é uma função não existente.

Function ErrorHanlding_Demo1()
   Dim x,y
   x = 10
   y = 20
   z = fnadd(x,y)
   a = fnmultiply(x,y)
End Function

Function fnadd(x,y)
   fnadd = x + y
End Function

Erros Lógicos

Erros lógicos podem ser o tipo de erro mais difícil de rastrear. Esses erros não são o resultado de um erro de sintaxe ou de tempo de execução. Em vez disso, eles ocorrem quando você comete um erro na lógica que orienta seu script e não obtém o resultado esperado.

Você não pode detectar esses erros, porque depende de seus requisitos de negócios que tipo de lógica você deseja colocar em seu programa.

Por exemplo, dividir um número por zero ou um script escrito que entra em um loop infinito.

Err Object

Suponha que se houver um erro de tempo de execução, a execução será interrompida exibindo a mensagem de erro. Como desenvolvedor, se quisermos capturar o erro, entãoError O objeto é usado.

Exemplo

No exemplo a seguir, Err.Number dá o número do erro e Err.Description fornece a descrição do erro.

Err.Raise 6   ' Raise an overflow error.
MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear   ' Clear the error.

Manipulação de erros

O VBA habilita uma rotina de tratamento de erros e também pode ser usado para desabilitar uma rotina de tratamento de erros. Sem uma instrução On Error, qualquer erro em tempo de execução que ocorra é fatal: uma mensagem de erro é exibida e a execução é interrompida abruptamente.

On Error { GoTo [ line | 0 | -1 ] | Resume Next }

Sr. Não. Palavra-chave e descrição
1

GoTo line

Ativa a rotina de tratamento de erros que começa na linha especificada no argumento de linha necessário. A linha especificada deve estar no mesmo procedimento que a instrução On Error, ou ocorrerá um erro em tempo de compilação.

2

GoTo 0

Desativa o manipulador de erros habilitado no procedimento atual e o redefine como Nothing.

3

GoTo -1

Desativa a exceção habilitada no procedimento atual e a redefine como Nothing.

4

Resume Next

Especifica que, quando ocorre um erro em tempo de execução, o controle vai para a instrução imediatamente após a instrução em que o erro ocorreu e a execução continua a partir desse ponto.

Exemplo

Public Sub OnErrorDemo()
   On Error GoTo ErrorHandler   ' Enable error-handling routine.
   Dim x, y, z As Integer
   x = 50
   y = 0
   z = x / y   ' Divide by ZERO Error Raises
  
   ErrorHandler:    ' Error-handling routine.
   Select Case Err.Number   ' Evaluate error number.
      Case 10   ' Divide by zero error
         MsgBox ("You attempted to divide by zero!")
      Case Else
         MsgBox "UNKNOWN ERROR  - Error# " & Err.Number & " : " & Err.Description
   End Select
   Resume Next
End Sub