Gestion des erreurs en VBA
-
On Error Goto
ErrorHandlerLabel
-
Resume
(Next
| ErrorHandlerLabel)
-
On Error Goto 0
(désactive l'actuel gestionnaire d'erreur)
-
Err
objet
L' Err
propriétés de l'objet sont normalement remis à zéro ou une chaîne de longueur nulle dans la routine de gestion des erreurs, mais il peut également être fait explicitement Err.Clear
.
Des erreurs dans la routine de gestion des erreurs sont appelé à disparaître.
La gamme 513-65535 est disponible pour les erreurs de l'utilisateur.
Pour la classe personnalisée des erreurs, vous ajoutez vbObjectError
pour le numéro d'erreur.
Pour ne pas mis en œuvre l'interface de membres dans une dérivée de la classe, vous devez utiliser la constante E_NOTIMPL = &H80004001
.
Option Explicit
Sub HandleError()
Dim a As Integer
On Error GoTo errMyErrorHandler
a = 7 / 0
On Error GoTo 0
Debug.Print "This line won't be executed."
DoCleanUp:
a = 0
Exit Sub
errMyErrorHandler:
MsgBox Err.Description, _
vbExclamation + vbOKCancel, _
"Error: " & CStr(Err.Number)
Resume DoCleanUp
End Sub
Sub RaiseAndHandleError()
On Error GoTo errMyErrorHandler
' The range 513-65535 is available for user errors.
' For class errors, you add vbObjectError to the error number.
Err.Raise vbObjectError + 513, "Module1::Test()", "My custom error."
On Error GoTo 0
Debug.Print "This line will be executed."
Exit Sub
errMyErrorHandler:
MsgBox Err.Description, _
vbExclamation + vbOKCancel, _
"Error: " & CStr(Err.Number)
Err.Clear
Resume Next
End Sub
Sub FailInErrorHandler()
Dim a As Integer
On Error GoTo errMyErrorHandler
a = 7 / 0
On Error GoTo 0
Debug.Print "This line won't be executed."
DoCleanUp:
a = 0
Exit Sub
errMyErrorHandler:
a = 7 / 0 ' <== Terminating error!
MsgBox Err.Description, _
vbExclamation + vbOKCancel, _
"Error: " & CStr(Err.Number)
Resume DoCleanUp
End Sub
Sub DontDoThis()
' Any error will go unnoticed!
On Error Resume Next
' Some complex code that fails here.
End Sub
Sub DoThisIfYouMust()
On Error Resume Next
' Some code that can fail but you don't care.
On Error GoTo 0
' More code here
End Sub