Compartilhar via


Instrução On Error (Visual Basic)

Permite que um erro-rotina de manipulação e especifica o local da rotina dentro de um procedimento; também pode ser usada para desabilitar um erro-rotina de manipulação.

Sem um On Errordedemonstrativo, qualquer execução-de tempo de erro que ocorre é fatal: será exibida uma mensagem de erro e pára a execução.

Sempre que possível, sugerimos que você use estruturado exceção tratamento em seu código, em vez de recorrer à manipulação de exceção de não-estruturados e o On Error demonstrativo. For more information, see Manipulação da Exceção Estruturada no Visual Basic.

ObservaçãoObservação

O Error palavra-chave também é usada a Instrução Error, que é suportada para compatibilidade com versões anteriores.

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

Parts

Term

Definition

GoTo line

Permite que o erro-tratamento de rotina que começa na linha especificada nas caixas necessário line argumento. O lineargumento é qualquer número de linha ou linha. Se um tempo de execução- erro ocorre, controle as ramificações para especificado de linha, tornando o manipulador de erro ativo. linha especificada deve estar no mesmo procedimento que o On Errordemonstrativoou uma compilar-tempo erro ocorrerá.

GoTo 0

Desabilita o manipulador de erro de ativada no procedimento atual e redefine para Nothing.

GoTo -1

Desativa o habilitado exceção no procedimento atual e redefine para Nothing.

Resume Next

Especifica que quando um tempo de execução- erro ocorre, controle vai para a demonstrativo imediatamente seguinte demonstrativo onde ocorreu o erro e continua de execução a partir desse ponto. Use este formulário em vez de On Error GoTo ao acessar objetos.

Comentários

Um "enabled" o manipulador deerro é aquele que é ativado por um On Errordedemonstrativo. "Ativo" o manipulador deerro é um manipulador de habilitados no processo de manipulação de um erro.

Se ocorre um erro enquanto um manipulador de erro está ativo (entre a ocorrência do erro e uma Resume, Exit Sub, Exit Function, ou Exit Property demonstrativo), atual procedimentodo manipulador de erro não pode manipular o erro. O controle retorna para o procedimentode chamada.

Se o procedimento de chamada tiver um manipulador de erro de ativada, ela é ativada para manipular o erro. Se a chamar o procedimentodo manipulador de erro também estiver ativo, o controle passa através de chamada de procedimentos anteriores até encontra um manipulador de erro de habilitado mas inativo. Se tal nenhum manipulador de erro for encontrado, o erro é fatal no ponto em que ele realmente ocorreu.

Cada vez que o manipulador de erro passa o controle para um procedimentode chamada, esse procedimento torna-se o procedimentoatual. Depois que um erro é manipulado por um manipulador de erro em qualquer procedimento, a execução reinicia no procedimento atual no ponto designado pelo Resume demonstrativo.

ObservaçãoObservação

Um erro-rotina de manipulação não é um Sub procedimento ou um Function procedimento. É uma seção de código marcado por umrótulo de linhaou um número de linha .

Number Property

Rotinas de tratamento de erro-contam com o valor a Numberpropriedade da Erroobjeto para determinar a causa do erro. A rotina deve teste ou salvar valores de propriedade de relevante na Erroobjeto antes de qualquer outro erro pode ocorrer ou antes de um procedimento que pode causar um erro é chamado. A propriedade valores a Err objeto refletir apenas o mais recente erro. A mensagem de erro associado Err.Number está contido em Err.Description.

Throw Statement

Um erro é gerado com o Err.Raise método define a Exception propriedade para uma instância criada recentemente a Exception classe. Para suportar o aumento de exceções de tipos derivados de exceção , uma Throwhá suporte para ademonstrativo do idioma. Isso leva a um único parâmetro que é a instância da exceção ser acionada. O exemplo a seguir mostra como esses recursos podem ser usados com o existente suporte à manipulação exceção :

    On Error GoTo Handler
    Throw New DivideByZeroException()
Handler:
    If (TypeOf Err.GetException() Is DivideByZeroException) Then
    ' Code for handling the error is entered here.
    End If

Observe que o On Error GoTodedemonstrativo intercepta todos os erros, independentemente daclassede exceção.

On Error Resume Next

On Error Resume Nextfaz a execução continuar com a demonstrativo imediatamente seguinte a demonstrativo que causou a execução de- errode tempo, ou com a demonstrativo imediatamente seguinte a mais recente, chamada de procedimento que contém o On Error Resume Next demonstrativo. Essa demonstrativo permite a execução de continuar, apesar de uma execução de- errode tempo. Você pode colocar o erro-rotina de manipulação onde ocorreria o erro , em vez de transferir o controle para outro local dentro do procedimento. Um On Error Resume Nextdemonstrativo fica inativo quando outro procedimento é chamado, portanto, você deve executar um On Error Resume Nextademonstrativo em cada rotina chamada, se você quiser embutidoerro tratamento dentro de rotina.

ObservaçãoObservação

O On Error Resume Next construção pode ser preferível On Error GoTo quando o tratamento de erros gerados durante o acesso a outros objetos. Verificação de Err após cada interação com um objeto remove a ambigüidade sobre o qual o objeto foi acessado pelo código. Pode ter certeza de qual objeto colocado o código de erro em Err.Number, bem como o objeto que originalmente gerou o erro (o objeto especificado em Err.Source).

On Error GoTo 0

On Error GoTo 0desativa o atual do procedimentode tratamento de erro . Ela não especifica a linha 0 como o início do erro-manipulação de código, mesmo que o procedimento contenha uma linha numerada como 0. Sem um On Error GoTo 0dedemonstrativo, um manipulador de erro é automaticamente desabilitado quando um procedimento é encerrado.

On Error GoTo -1

On Error GoTo -1desativa a exceção do procedimentoatual. Ele não especifica a linha -1 como o início do erro-manipulação de código, mesmo que o procedimento contenha uma linha numerada como -1. Sem um On Error GoTo -1dedemonstrativo, uma exceção é automaticamente desabilitado quando um procedimento é encerrado.

Para evitar o erro-código seja executado quando ocorreu nenhum erro de manipulação, coloque uma Exit Sub, Exit Function, ou Exit Propertydedemonstrativo imediatamente antes do erro-rotina, como no seguinte fragmento de manipulação:

Public Sub InitializeMatrix(ByVal Var1 As Object, ByVal Var2 As Object)
   On Error GoTo ErrorHandler
   ' Insert code that might generate an error here
   Exit Sub
ErrorHandler:
   ' Insert code to handle the error here
   Resume Next
End Sub

Aqui, o erro-código de tratamento segue o Exit Subdemonstrativo e precede o End Subdedemonstrativo para separar a partir do fluxo do procedimento . Você pode colocar o erro-o código em qualquer lugar em um procedimentode tratamento.

Não ajustado Erros

Não ajustado em objetos são retornados para o aplicativo de controle quando o objeto é executado como um arquivo executável . Dentro do ambientedo desenvolvimento, sumplemento são retornados para o aplicativo de controle somente se as opções adequadas são definidas. Consulte a documentação do hostdo seuaplicativopara obter uma descrição dos quais opções devem ser definidas durante a depuração, como defini-las e se o host pode criar classes.

Se você criar um objeto que acessa outros objetos, você deve tentar tratar quaisquer erros não tratados, eles passam de volta. Se você não pode mapa o erro codifica em Err.Number a um dos seus próprios erros e passará-los de volta para o chamador do seu objeto. Você deve especificar o seu erro , adicionando o seu código de erro para o VbObjectError constante. Por exemplo, se o código de erro está 1052, atribuí-lo da seguinte maneira:

Err.Number = vbObjectError + 1052

Aviso

Erros de sistema durante as chamadas para o Windows dinâmico-link libraries (DLLs) não geram exceções e não podem ser interceptados com interceptação de erro de Visual Basic. Ao chamar funções DLL, você deve verificar cada valor retornado para o sucesso ou fracasso (conforme a especificações API) e no evento de falha, verifique o valor Errdoobjeto LastDLLErrorpropriedade.

Exemplo

Este exemplo usa primeiro o On Error GoTodedemonstrativo para especificar o local de um erro-rotina dentro de um procedimentode tratamento. No exemplo, uma tentativa de divisão por zero gera erro número 6. O erro é tratado no erro-rotina de tratamento e o controle é retornado para a demonstrativo que causou o erro. O On Error GoTo 0dedemonstrativo desativa a interceptação de erro . Em seguida, a On Error Resume Nextdedemonstrativo é usado para adiar a interceptação de erro para que o contexto para o erro gerado pela próxima demonstrativo pode ser conhecido por determinados. Observe que Err.Clear é usado para limpar o Erras propriedades doobjetoapós o erro é tratado.

Public Sub OnErrorDemo()
   On Error GoTo ErrorHandler   ' Enable error-handling routine.
   Dim x As Integer = 32
   Dim y As Integer = 0
   Dim z As Integer
   z = x / y   ' Creates a divide by zero error
   On Error GoTo 0   ' Turn off error trapping.
   On Error Resume Next   ' Defer error trapping.
   z = x / y   ' Creates a divide by zero error again
   If Err.Number = 6 Then
      ' Tell user what happened. Then clear the Err object.
      Dim Msg As String
      Msg = "There was an error attempting to divide by zero!"
      MsgBox(Msg, , "Divide by zero error")
      Err.Clear() ' Clear Err object fields.
   End If
Exit Sub      ' Exit to avoid handler.
ErrorHandler:  ' Error-handling routine.
   Select Case Err.Number   ' Evaluate error number.
      Case 6   ' Divide by zero error
         MsgBox("You attempted to divide by zero!")
         ' Insert code to handle this error
      Case Else
         ' Insert code to handle other situations here...
   End Select
   Resume Next  ' Resume execution at same line
                ' that caused the error.
End Sub

Requisitos

Namespace: Microsoft. VisualBasic

Assembly: Visual Basic Runtime Library (in Microsoft.VisualBasic.dll)

Consulte também

Referência

Instrução End

Err

Declaração Saída (Visual Basic)

LastDllError

Declaração Resume

Conceitos

Mensagens de erro (Visual Basic)