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çã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çã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çã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
Declaração Saída (Visual Basic)