Excel Common Error Handler
The VBA code illustrates a common error handler technique. Keep in mind there are three forms of the On Error Statement. All three of these clear any previous error codes (Err.Number and Err.Description):
(1) On Error GoTo Line (A User Defined Error Handling Routine)
(2) On Error GoTo 0 (Turns Off User Error Handling)
(3) On Error Resume Next (Ignores the Error And Executes The Next Statement)
The code examples also illustrate the following:
(1) Err.Clear (Clear Error Codes But Leave Any User Error Handlers Still Active)
(2) Resume (Clear Error Codes But Leave Any User Error Handlers Still Active)
For a list of all error codes, see VBA Error Codes.
Program Code
Option Explicit
Sub TestError()
' ************************************************************
' This Creates An Error With Divide By Zero
' ************************************************************
' ************************************************************
' Demonstrate The Following:
' (1) On Error GoTo ErrorHandler (Reset Previous Err.Number)
' (2) On Error GoTo ErrorHandler (Create User Error Handling)
' (3) On Error GoTo 0 (Removes User Error Handling)
' (4) On Error GoTo 0 (Also Resets Err.Number to 0)
' (5) Resume (Resets The Err.Number and Err.Description)
' (6) Resume (Leaves User Error Handling Intact)
' (7) Proper User of Err.Number and Err.Description
' ************************************************************
Dim intDividend As Integer
Dim intDivisor As Integer
Dim intResult As Integer
Dim varErrorReturn As Variant
intDivisor = 0
intDividend = 20
' ************************************************************
' Reset Any Previous Error Codes And Set User Error Handling
' ************************************************************
On Error GoTo ErrorHandler
intResult = intDividend / intDivisor
Exit_Procedure:
' ************************************************************
' On Error GoTo 0 Removes Any User Error Trapping
' Also Resets The Err.Number and Err.Description
' ************************************************************
On Error GoTo 0
Exit Sub
ErrorHandler:
Call CommonErrorHandler(Err.Number, Err.Description)
' ************************************************************
' The Resume Command Resets The Error Code to 0
' But It Leaves The "On Error GoTo ErrorHandler Intact
' ************************************************************
Resume Exit_Procedure
End Sub
Sub TestError1()
' ************************************************************
' This Create An Error With Divide By Zero
' ************************************************************
' ************************************************************
' Demonstrate The Following:
' (1) On Error Resume Next (Reset Previous Error Codes)
' (2) On Error Resume Next (Keep Processing Even If Errors)
' (3) How To Test For A Specific Err.Number
' (4) Err.Clear (Clear Error Code and Description)
' (5) Err.Clear (Leave Any User Error Trapping Intact)
' (6) On Error GoTo 0 (Removes User Error Handling)
' (7) On Error GoTo 0 (Also Resets Err.Number to 0)
' ************************************************************
Dim intDividend As Integer
Dim intDivisor As Integer
Dim intResult As Integer
Dim varErrorReturn As Variant
intDivisor = 0
intDividend = 20
intResult = 5
' ************************************************************
' The "On Error Resume Next" Clears Any Previous Error Codes
' Then Instructs Excel To Continue Processing The Next
' Statement Even If An Error Occurs. If an Error Occurs,
' Keep Any Err.Code And Err.Description So The Values Can
' Be Tested
' ************************************************************
On Error Resume Next
intResult = intDividend / intDivisor
If Err.Number = 11 Then
intResult = 10
' ************************************************************
' The Err.Clear Command Resets The Error Code to 0
' But It Leaves the "On Error Resume Next" Intact
' ************************************************************
Err.Clear
Exit Sub
End If
' ************************************************************
' On Error GoTo 0 Removes Any User Error Trapping
' Also Resets The Err.Number and Err.Description
' ************************************************************
On Error GoTo 0
Exit Sub
End Sub
' ************************************************************
' The Common Error Display Routine
' ************************************************************
Public Sub CommonErrorHandler(ErrorNumber As String, ErrorDescription As String)
Dim varMessageReturn As Variant
varMessageReturn = MsgBox("An Error Occurred In This Application" & vbCrLf & _
"Please Contact The Developer" & vbCrLf & vbCrLf & _
"Error Number = " & ErrorNumber & " Error Description = " & _
ErrorDescription, vbCritical)
End Sub
