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