Visão geral (Visual Basic) de manipulação de exceção não estruturada

No unstructured exception handling, você pode colocar uma declaração On Error no início de um bloco de código, e ela trata qualquer dos erros que ocorrem dentro desse bloco. Quando uma exceção aparece em um procedimento após a execução da declaração On Error , o programa se ramifica para o argumento de linha especificado na declaração On Error. O argumento da linha, que é o número da linha ou rótulo da linha, indica a localidade do manipulador de exceção.

Às vezes, uma chamada é feita do procedimento original para outro procedimento, e uma exceção ocorre no procedimento chamado. Em tais casos, se o procedimento chamado não trata a exceção, a exceção propaga-se de volta para o procedimento de chamada, e as ramificações de execução para o argumento da linha.

ObservaçãoObservação

Tratamento de erros não estruturado usando On Error pode prejudicar o desempenho do aplicativo e resultar em código difícil para depurar e manter. O tratamento de erros estruturado é o método recomendado. Para obter mais informações, consulte Visão Geral sobre a Manipulação Estruturada de Exceções para o Visual Basic.

On Error GoTo Line

A instrução On Error GoTo Line pressupõe que o código de tratamento de erros começa na linha especificada no argumento line necessário. Se ocorrer um erro em tempo de execução, controlar as ramificações para o número da linha ou rótulo da linha especificada no argumento, ativando o manipulador de erro*.*. A linha especificada deve estar no mesmo procedimento que a instrução On Error GoTo Line;caso contrário, Visual Basic gera um erro do compilador. O exemplo a seguir ilustra o uso de um manipulador de erro com um rótulo de linha:

Sub TestSub
   On Error GoTo ErrorHandler
      ' Code that may or may not contain errors.
   Exit Sub

   ErrorHandler:
      ' Code that handles errors.
      Resume
End Sub

O exemplo contém um manipulador de erro chamado ErrorHandler. Se qualquer código na sub-rotina TestSub gera um erro, o Visual Basic imediatamente executa o código que segue o rótulo ErrorHandler. No final do bloco de tratamento de erros, a declaração Resume passa controle novamente para a linha do código onde o erro ocorreu primeiro. O restante da sub-rotina depois continuará executando como se o erro não tivesse ocorrido.

ObservaçãoObservação

Você deve colocar uma declaração Exit Sub imediatamente antes do bloco tratamento de erro. Caso contrário, o Visual Basic executa o código de tratamento de erros quando atingir o final do sub-rotina, causando resultados não desejados ou inesperados.

On Error Resume Next

A declaração On Error Resume Next especifica que no evento ocorreu do erro em tempo de execução, o controle passa para a declaração imediatamente seguinte a aquela na qual ocorreu o erro. Nesse ponto, a execução continua. On Error Resume Nextpermite que você coloque o tratamento de erros onde ocorrerão erros de rotinas, em vez de transferir o controle para outro local no procedimento.

ObservaçãoObservação

Se o seu procedimento chama um outro procedimento, a declaração On Error Resume Next se torna inativa durante a execução do procedimento chamado. Portanto, você deve colocar uma instrução On Error Resume Next em cada procedimento chamado que precisa um. Isso é necessário porque o comportamento do Resume Next aplica-se somente ao procedimento que contém a instrução On Error Resume Next. Se um erro não identificado ocorrer em um procedimento chamado, a exceção se propaga e volta para o procedimento de chamada, e a execução continua na declaração após a chamada. Em tais casos, o erro não é tratado.

Resume também pode ser usado em si próprio, fora a declaração On Error. Quando o Resume é usado dessa forma, o Visual Basic devolve o controle para a declaração que causou o erro. Você geralmente usa o Resume após um manipulador de erro corrigir o erro.

Visual Basictambém fornece a Resume Next a instrução, que direciona o controle para a linha imediatamente seguinte a linha de código que causou o erro. Você pode usar o Resume Next para casos em que um erro não irá fazer interromper o funcionamento de seu aplicativo. Também pode usá-lo se um erro não alterará os resultados esperados de sua sub-rotina.

Outra variação na Resume é a instrução Resume Line, que é semelhante a On Error GoTo Line. Resume Linepassa o controle para uma linha que você especificar o line argumento. Você pode usar Resume Line somente em um manipulador de erro.

ObservaçãoObservação

Ao depurar seu código, você deve desativar a instrução On Error Resume Next.

On Error GoTo 0

A declaração On Error GoTo 0 desativa qualquer manipulador de erro no procedimento atual. Se você não incluir uma declaração On Error GoTo 0, o manipulador de erro é desativado quando o procedimento que contém o manipulador de exceções termina.

ObservaçãoObservação

A declaração On Error GoTo 0 não é destinada para especificar uma linha 0 como o início do código de tratamento de erros, mesmo que o procedimento contenha uma linha numerada como 0.

On Error GoTo -1

A declaração On Error GoTo -1 desativa quaisquer manipuladores de exceção do procedimento atual. Se você não incluir uma declaração On Error GoTo -1, a exceção é desativada automaticamente quando o procedimento termina.

ObservaçãoObservação

O On Error GoTo -1 instrução não deve especificar a linha -1 como o início do código de tratamento de erros, mesmo se o procedimento contenha uma linha numerada como -1.

Exemplo do manipulador exceção não estruturado

No código a seguir, o manipulador de exceção é denominado DivideByZero e trata um erro específico - a tentativa da divisão por zero. Se ocorrer um erro diferente, o Visual Basic percebe o erro em tempo de execução e para o aplicativo.

Sub ErrorTest ()
' Declare variables.
   Dim x As Integer, y As Integer, z As Integer
   ' The exception handler is named "DivideByZero".
   On Error GoTo DivideByZero
   ' The main part of the code, which might cause an error.
   x = 2
   y = 0
   z = x \ y

   ' This line disables the exception handler.
   On Error GoTo 0
      Console.WriteLine(x & "/" & y & " = " & z)

   ' Exit the subroutine before the error-handling code.
   ' Failure to do so can create unexpected results.
   Exit Sub

   ' This is the exception handler, which deals with the error.
   DivideByZero:
   ' Include a friendly message to let the user know what is happening.
   Console.WriteLine("You have attempted to divide by zero!")

   ' Provide a solution to the error.
   y = 2

   ' The Resume statement returns to the point at which
   ' the error first occurred, so the application
   ' can continue to run.
   Resume

End Sub

Consulte também

Tarefas

Como: Recuperar informações de um objeto de erro (Visual Basic)

Referência

Instrução End

Err

Declaração Saída (Visual Basic)

Instrução On Error (Visual Basic)

Declaração Resume

Conceitos

Objeto de exceção não estruturada (Visual Basic) de manipulação de erro.

Introdução ao (Visual Basic) de manipulação de exceção

Tipos de erros (Visual Basic)

Escolhendo quando usar (Visual Basic) de manipulação de exceção estruturada e não estruturada