On Error, instruction (Visual Basic)On Error Statement (Visual Basic)

Active une routine de gestion des erreurs et spécifie l’emplacement de la routine dans une procédure. peut également être utilisé pour désactiver une routine de gestion des erreurs.Enables an error-handling routine and specifies the location of the routine within a procedure; can also be used to disable an error-handling routine. L' On Error instruction est utilisée dans la gestion non structurée des erreurs et peut être utilisée à la place de la gestion structurée des exceptions.The On Error statement is used in unstructured error handling and can be used instead of structured exception handling. La gestion structurée des exceptions étant intégrée à .net, est généralement plus efficace, et est donc recommandée lors de la gestion des erreurs d’exécution dans votre application.Structured exception handling is built into .NET, is generally more efficient, and so is recommended when handling runtime errors in your application.

Sans la gestion des erreurs ou la gestion des exceptions, toute erreur d’exécution qui se produit est fatale: un message d’erreur s’affiche et l’exécution s’arrête.Without error handling or exception handling, any run-time error that occurs is fatal: an error message is displayed, and execution stops.

Notes

Le Error mot clé est également utilisé dans l' instruction Error, qui est prise en charge pour la compatibilité descendante.The Error keyword is also used in the Error Statement, which is supported for backward compatibility.

SyntaxeSyntax

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

ComposantsParts

TermeTerm DéfinitionDefinition
GoToligneGoTo line Active la routine de gestion des erreurs qui démarre à la ligne spécifiée dans l’argument de ligne requis.Enables the error-handling routine that starts at the line specified in the required line argument. L’argument de ligne est une étiquette de ligne ou un numéro de ligne.The line argument is any line label or line number. Si une erreur d’exécution se produit, le contrôle effectue une branche vers la ligne spécifiée, ce qui rend le gestionnaire d’erreurs actif.If a run-time error occurs, control branches to the specified line, making the error handler active. La ligne spécifiée doit être dans la même procédure que l' On Error instruction ou une erreur de compilation se produit.The specified line must be in the same procedure as the On Error statement or a compile-time error will occur.
GoTo 0 Désactive le gestionnaire d’erreurs activé dans la procédure actuelle et le réinitialise à Nothing.Disables enabled error handler in the current procedure and resets it to Nothing.
GoTo -1 Désactive l’exception activée dans la procédure actuelle et la réinitialise à Nothing.Disables enabled exception in the current procedure and resets it to Nothing.
Resume Next Spécifie que lorsqu’une erreur d’exécution se produit, le contrôle passe à l’instruction qui suit immédiatement l’instruction où l’erreur s’est produite, et l’exécution se poursuit à partir de ce point.Specifies that when a run-time error occurs, control goes to the statement immediately following the statement where the error occurred, and execution continues from that point. Utilisez ce formulaire plutôt que On Error GoTo lors de l’accès aux objets.Use this form rather than On Error GoTo when accessing objects.

NotesRemarks

Notes

Nous vous recommandons d’utiliser la gestion structurée des exceptions dans votre code dans la mesure du possible, au lieu d’utiliser On Error la gestion des exceptions non structurées et l’instruction.We recommend that you use structured exception handling in your code whenever possible, rather than using unstructured exception handling and the On Error statement. Pour plus d’informations, consultez Try...Catch...Finally, instruction.For more information, see Try...Catch...Finally Statement.

Un gestionnaire d’erreurs «activé» est activé par une On Error instruction.An "enabled" error handler is one that is turned on by an On Error statement. Un gestionnaire d’erreurs «actif» est un gestionnaire activé qui est en train de gérer une erreur.An "active" error handler is an enabled handler that is in the process of handling an error.

Si une erreur se produit alors qu’un gestionnaire d’erreurs est actif (entre l’occurrence de l' Resumeerreur Exit Subet une instruction Exit Property ,, Exit Functionou), le gestionnaire d’erreurs de la procédure en cours ne peut pas gérer l’erreur.If an error occurs while an error handler is active (between the occurrence of the error and a Resume, Exit Sub, Exit Function, or Exit Property statement), the current procedure's error handler cannot handle the error. Le contrôle retourne à la procédure appelante.Control returns to the calling procedure.

Si la procédure appelante a un gestionnaire d’erreurs activé, elle est activée pour gérer l’erreur.If the calling procedure has an enabled error handler, it is activated to handle the error. Si le gestionnaire d’erreurs de la procédure appelante est également actif, le contrôle passe par les procédures appelées précédentes jusqu’à ce qu’un gestionnaire d’erreurs activé, mais inactif soit trouvé.If the calling procedure's error handler is also active, control passes back through previous calling procedures until an enabled, but inactive, error handler is found. Si aucun gestionnaire d’erreurs de ce type n’est trouvé, l’erreur est irrécupérable au point où elle s’est réellement produite.If no such error handler is found, the error is fatal at the point at which it actually occurred.

Chaque fois que le gestionnaire d’erreurs repasse le contrôle à une procédure appelante, cette procédure devient la procédure en cours.Each time the error handler passes control back to a calling procedure, that procedure becomes the current procedure. Une fois qu’une erreur est gérée par un gestionnaire d’erreurs dans une procédure, l’exécution reprend dans la procédure en cours au Resume point désigné par l’instruction.Once an error is handled by an error handler in any procedure, execution resumes in the current procedure at the point designated by the Resume statement.

Notes

Une routine de gestion des erreurs n’est Sub pas une procédure Function ou une procédure.An error-handling routine is not a Sub procedure or a Function procedure. Il s’agit d’une section de code marquée par une étiquette de ligne ou un numéro de ligne.It is a section of code marked by a line label or a line number.

Number, propriétéNumber Property

Les routines de gestion des erreurs reposent sur Number la valeur de Err la propriété de l’objet pour déterminer la cause de l’erreur.Error-handling routines rely on the value in the Number property of the Err object to determine the cause of the error. La routine doit tester ou enregistrer les valeurs de propriété pertinentes Err dans l’objet avant qu’une autre erreur ne se produise ou qu’une procédure susceptible de provoquer une erreur soit appelée.The routine should test or save relevant property values in the Err object before any other error can occur or before a procedure that might cause an error is called. Les valeurs de propriété dans Err l’objet reflètent uniquement l’erreur la plus récente.The property values in the Err object reflect only the most recent error. Le message d’erreur associé Err.Number à est contenu Err.Descriptiondans.The error message associated with Err.Number is contained in Err.Description.

Throw, instructionThrow Statement

Une erreur levée avec la Err.Raise méthode affecte à la Exception propriété une instance nouvellement créée de la Exception classe.An error that is raised with the Err.Raise method sets the Exception property to a newly created instance of the Exception class. Afin de prendre en charge le déclenchement d’exceptions de types d’exception dérivés, une Throw instruction est prise en charge dans le langage.In order to support the raising of exceptions of derived exception types, a Throw statement is supported in the language. Cela prend un paramètre unique qui est l’instance d’exception à lever.This takes a single parameter that is the exception instance to be thrown. L’exemple suivant montre comment ces fonctionnalités peuvent être utilisées avec la prise en charge de la gestion des exceptions existante:The following example shows how these features can be used with the existing exception handling support:

    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

Notez que l' On Error GoTo instruction intercepte toutes les erreurs, quelle que soit la classe d’exception.Notice that the On Error GoTo statement traps all errors, regardless of the exception class.

En cas d’erreur, reprendre la prochaineOn Error Resume Next

On Error Resume Nextfait en sorte que l’exécution continue avec l’instruction qui suit immédiatement l’instruction qui a provoqué l’erreur d’exécution, ou avec l’instruction qui suit immédiatement l’appel le plus récent On Error Resume Next de la procédure contenant l’instruction.On Error Resume Next causes execution to continue with the statement immediately following the statement that caused the run-time error, or with the statement immediately following the most recent call out of the procedure containing the On Error Resume Next statement. Cette instruction permet à l’exécution de continuer en dépit d’une erreur d’exécution.This statement allows execution to continue despite a run-time error. Vous pouvez placer la routine de gestion des erreurs dans laquelle l’erreur se produit au lieu de transférer le contrôle à un autre emplacement de la procédure.You can place the error-handling routine where the error would occur rather than transferring control to another location within the procedure. Une On Error Resume Next instruction devient inactive lorsqu’une autre procédure est appelée. vous devez donc exécuter On Error Resume Next une instruction dans chaque routine appelée si vous souhaitez une gestion des erreurs Inline au sein de cette routine.An On Error Resume Next statement becomes inactive when another procedure is called, so you should execute an On Error Resume Next statement in each called routine if you want inline error handling within that routine.

Notes

La On Error Resume Next construction peut être préférable lors de On Error GoTo la gestion des erreurs générées au cours de l’accès à d’autres objets.The On Error Resume Next construct may be preferable to On Error GoTo when handling errors generated during access to other objects. La Err vérification après chaque interaction avec un objet supprime l’ambiguïté relative à l’objet auquel le code a accédé.Checking Err after each interaction with an object removes ambiguity about which object was accessed by the code. Vous pouvez vous assurer que l’objet a placé le code Err.Numberd’erreur, ainsi que l’objet qui a généré l’erreur à l’origine Err.Source(l’objet spécifié dans).You can be sure which object placed the error code in Err.Number, as well as which object originally generated the error (the object specified in Err.Source).

En cas d’erreur GoTo 0On Error GoTo 0

On Error GoTo 0désactive la gestion des erreurs dans la procédure actuelle.On Error GoTo 0 disables error handling in the current procedure. Elle ne spécifie pas la ligne 0 comme début du code de gestion des erreurs, même si la procédure contient une ligne numérotée 0.It doesn't specify line 0 as the start of the error-handling code, even if the procedure contains a line numbered 0. On Error GoTo 0 Sans instruction, un gestionnaire d’erreurs est automatiquement désactivé lorsqu’une procédure est quittée.Without an On Error GoTo 0 statement, an error handler is automatically disabled when a procedure is exited.

En cas d’erreur GoTo-1On Error GoTo -1

On Error GoTo -1désactive l’exception dans la procédure actuelle.On Error GoTo -1 disables the exception in the current procedure. Elle ne spécifie pas la ligne-1 comme début du code de gestion des erreurs, même si la procédure contient une ligne numérotée-1.It does not specify line -1 as the start of the error-handling code, even if the procedure contains a line numbered -1. On Error GoTo -1 Sans instruction, une exception est automatiquement désactivée lors de la fermeture d’une procédure.Without an On Error GoTo -1 statement, an exception is automatically disabled when a procedure is exited.

Pour empêcher l’exécution du code de gestion des erreurs quand aucune erreur ne s’est Exit Subproduite Exit Function, placez Exit Property une instruction, ou immédiatement avant la routine de gestion des erreurs, comme dans le fragment suivant:To prevent error-handling code from running when no error has occurred, place an Exit Sub, Exit Function, or Exit Property statement immediately before the error-handling routine, as in the following fragment:

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

Ici, le code de gestion des erreurs suit Exit Sub l’instruction et précède End Sub l’instruction pour la séparer du déroulement de la procédure.Here, the error-handling code follows the Exit Sub statement and precedes the End Sub statement to separate it from the procedure flow. Vous pouvez placer le code de gestion des erreurs n’importe où dans une procédure.You can place error-handling code anywhere in a procedure.

Erreurs ininterrompuesUntrapped Errors

Les erreurs non interceptées dans les objets sont retournées à l’application de contrôle lorsque l’objet s’exécute en tant que fichier exécutable.Untrapped errors in objects are returned to the controlling application when the object is running as an executable file. Dans l’environnement de développement, les erreurs qui ne sont pas interceptées sont retournées à l’application de contrôle uniquement si les options appropriées sont définies.Within the development environment, untrapped errors are returned to the controlling application only if the proper options are set. Consultez la documentation de votre application hôte pour obtenir une description des options qui doivent être définies pendant le débogage, la façon de les définir et si l’hôte peut créer des classes.See your host application's documentation for a description of which options should be set during debugging, how to set them, and whether the host can create classes.

Si vous créez un objet qui accède à d’autres objets, vous devez tenter de gérer toutes les erreurs non gérées qu’ils passent.If you create an object that accesses other objects, you should try to handle any unhandled errors they pass back. Si ce n’est pas le cas, mappez les codes d’erreur dans Err.Number à l’une de vos erreurs, puis repassez-les à l’appelant de votre objet.If you cannot, map the error codes in Err.Number to one of your own errors and then pass them back to the caller of your object. Vous devez spécifier votre erreur en ajoutant votre code d’erreur à VbObjectError la constante.You should specify your error by adding your error code to the VbObjectError constant. Par exemple, si votre code d’erreur est 1052, attribuez-le comme suit:For example, if your error code is 1052, assign it as follows:

Err.Number = vbObjectError + 1052

Attention

Les erreurs système au cours des appels aux bibliothèques de liens dynamiques (dll) Windows ne déclenchent pas d’exceptions et ne peuvent pas être interceptées avec Visual Basic l’interception des erreurs.System errors during calls to Windows dynamic-link libraries (DLLs) do not raise exceptions and cannot be trapped with Visual Basic error trapping. Lors de l’appel de fonctions dll, vous devez vérifier la réussite ou l’échec de chaque valeur de retour (en fonction des spécifications de l’API) et, en cas de défaillance Err , vérifier LastDLLError la valeur dans la propriété de l’objet.When calling DLL functions, you should check each return value for success or failure (according to the API specifications), and in the event of a failure, check the value in the Err object's LastDLLError property.

ExempleExample

Cet exemple utilise d’abord On Error GoTo l’instruction pour spécifier l’emplacement d’une routine de gestion des erreurs au sein d’une procédure.This example first uses the On Error GoTo statement to specify the location of an error-handling routine within a procedure. Dans l’exemple, une tentative de division par zéro génère le numéro d’erreur 6.In the example, an attempt to divide by zero generates error number 6. L’erreur est gérée dans la routine de gestion des erreurs et le contrôle est ensuite renvoyé à l’instruction qui a provoqué l’erreur.The error is handled in the error-handling routine, and control is then returned to the statement that caused the error. L' On Error GoTo 0 instruction désactive l’interception des erreurs.The On Error GoTo 0 statement turns off error trapping. L' On Error Resume Next instruction est ensuite utilisée pour différer l’interception des erreurs de façon à ce que le contexte de l’erreur générée par l’instruction suivante puisse être déterminé.Then the On Error Resume Next statement is used to defer error trapping so that the context for the error generated by the next statement can be known for certain. Notez que Err.Clear est utilisé pour effacer les Err propriétés de l’objet une fois que l’erreur est gérée.Note that Err.Clear is used to clear the Err object's properties after the error is handled.

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 the statement immediately 
                ' following the statement where the error occurred.
End Sub

Configuration requiseRequirements

Espace de noms : Microsoft. VisualBasicNamespace: Microsoft.VisualBasic

Chargeur bibliothèque Visual Basic Runtime (dans Microsoft.VisualBasic.dll)Assembly: Visual Basic Runtime Library (in Microsoft.VisualBasic.dll)

Voir aussiSee also