VB6Parse / Library / Environment / error

VB6 Library Reference

Error Function

Returns the error message that corresponds to a given error number.

Syntax

Error[(errornumber)]

Parameters

Return Value

Returns a String containing the error message associated with the specified error number. If the error number is not recognized, Error returns "Application-defined or object-defined error".

Remarks

The Error function is used to retrieve the text description of VB6 run-time errors. It's useful for error handling, logging, and displaying user-friendly error messages. Important Characteristics: - Returns error message as String - Without argument, returns message for current error (Err.Number) - With argument, returns message for specified error number - VB6 error numbers range from 0 to 65535 - User-defined errors typically use 512-65535 range - System errors use 0-511 range - Unrecognized errors return generic message - Does not clear or raise errors - Can be used without On Error statement - Err.Description also provides error messages

Common VB6 Error Numbers

Examples

Basic Usage

' Get error message for specific error number
Dim msg As String
msg = Error(53)
Debug.Print msg  ' Prints: "File not found"
msg = Error(11)
Debug.Print msg  ' Prints: "Division by zero"

Get Current Error Message

Sub TestErrorHandling()
    On Error Resume Next
    ' Cause an error
    Dim x As Integer
    x = 1 / 0
    ' Check if error occurred
    If Err.Number <> 0 Then
        ' Get error message without parameter (uses current error)
        Debug.Print "Error: " & Error
        Debug.Print "Error number: " & Err.Number
        Err.Clear
    End If
End Sub

Display Error in Message Box

Sub OpenFileWithErrorHandling(filePath As String)
    On Error GoTo ErrorHandler
    Dim fileNum As Integer
    fileNum = FreeFile
    Open filePath For Input As #fileNum
    ' Process file...
    Close #fileNum
    Exit Sub
ErrorHandler:
    MsgBox "Error " & Err.Number & ": " & Error(Err.Number), _
           vbExclamation, "File Error"
End Sub

Common Patterns

Error Lookup Table

Function GetErrorMessage(errorNumber As Long) As String
    ' Get standard VB6 error message
    GetErrorMessage = Error(errorNumber)
    ' Override with custom messages if desired
    Select Case errorNumber
        Case 53
            GetErrorMessage = "The specified file could not be found. Please check the path."
        Case 61
            GetErrorMessage = "The disk is full. Please free up space and try again."
        Case 91
            GetErrorMessage = "Object variable not initialized. Please contact support."
    End Select
End Function

Error Logging

Sub LogError(procedureName As String)
    Dim fileNum As Integer
    Dim logPath As String
    logPath = App.Path & "\error.log"
    fileNum = FreeFile
    Open logPath For Append As #fileNum
    Print #fileNum, Format(Now, "yyyy-mm-dd hh:nn:ss") & " | " & _
                    procedureName & " | " & _
                    "Error " & Err.Number & ": " & Error(Err.Number)
    Close #fileNum
End Sub

Custom Error Messages

Function GetFriendlyErrorMessage(errorNumber As Long) As String
    Dim standardMsg As String
    standardMsg = Error(errorNumber)
    ' Provide user-friendly alternatives
    Select Case errorNumber
        Case 53  ' File not found
            GetFriendlyErrorMessage = "We couldn't find that file. " & _
                "It may have been moved or deleted."
        Case 70  ' Permission denied
            GetFriendlyErrorMessage = "You don't have permission to access this file. " & _
                "Please contact your administrator."
        Case 429  ' Can't create object
            GetFriendlyErrorMessage = "A required component is not installed. " & _
                "Please reinstall the application."
        Case Else
            GetFriendlyErrorMessage = standardMsg
    End Select
End Function

Error Report Dialog

Sub ShowErrorReport()
    Dim msg As String
    msg = "An error has occurred:" & vbCrLf & vbCrLf
    msg = msg & "Error Number: " & Err.Number & vbCrLf
    msg = msg & "Description: " & Error(Err.Number) & vbCrLf
    msg = msg & "Source: " & Err.Source & vbCrLf
    If Err.HelpFile <> "" Then
        msg = msg & "Help File: " & Err.HelpFile & vbCrLf
        msg = msg & "Help Context: " & Err.HelpContext & vbCrLf
    End If
    MsgBox msg, vbCritical, "Application Error"
End Sub

Validate Error Numbers

Function IsValidErrorNumber(errNum As Long) As Boolean
    Dim msg As String
    ' Get error message
    msg = Error(errNum)
    ' If it's not a recognized error, VB6 returns a generic message
    If InStr(msg, "Application-defined") > 0 Or _
       InStr(msg, "object-defined") > 0 Then
        IsValidErrorNumber = False
    Else
        IsValidErrorNumber = True
    End If
End Function

List Common Errors

Sub ListCommonErrors()
    Dim errorNumbers() As Long
    Dim i As Integer
    errorNumbers = Array(5, 6, 7, 9, 11, 13, 52, 53, 54, 61, 62, 70, 91, 429)
    Debug.Print "Common VB6 Errors:"
    Debug.Print String(50, "-")
    For i = LBound(errorNumbers) To UBound(errorNumbers)
        Debug.Print errorNumbers(i) & ": " & Error(errorNumbers(i))
    Next i
End Sub

Enhanced Error Handler

Function HandleError(moduleName As String, procedureName As String) As VbMsgBoxResult
    Dim msg As String
    Dim errorMsg As String
    errorMsg = Error(Err.Number)
    msg = "An error occurred in " & moduleName & "." & procedureName & vbCrLf & vbCrLf
    msg = msg & "Error " & Err.Number & ": " & errorMsg & vbCrLf & vbCrLf
    msg = msg & "Would you like to continue?"
    HandleError = MsgBox(msg, vbYesNo + vbExclamation, "Error")
    ' Log the error
    LogError moduleName & "." & procedureName
    ' Clear the error
    Err.Clear
End Function

Error Dictionary

Function BuildErrorDictionary() As Collection
    Dim dict As New Collection
    Dim i As Long
    Dim msg As String
    ' Build dictionary of all valid error messages
    For i = 3 To 1000
        msg = Error(i)
        ' Only add if it's a recognized error
        If InStr(msg, "Application-defined") = 0 Then
            On Error Resume Next
            dict.Add msg, CStr(i)
            On Error GoTo 0
        End If
    Next i
    Set BuildErrorDictionary = dict
End Function

Multilingual Error Messages

Function GetLocalizedError(errorNumber As Long, language As String) As String
    Dim standardMsg As String
    standardMsg = Error(errorNumber)
    ' Provide translations for common errors
    If language = "ES" Then  ' Spanish
        Select Case errorNumber
            Case 53: GetLocalizedError = "Archivo no encontrado"
            Case 61: GetLocalizedError = "Disco lleno"
            Case 70: GetLocalizedError = "Permiso denegado"
            Case Else: GetLocalizedError = standardMsg
        End Select
    ElseIf language = "FR" Then  ' French
        Select Case errorNumber
            Case 53: GetLocalizedError = "Fichier non trouvé"
            Case 61: GetLocalizedError = "Disque plein"
            Case 70: GetLocalizedError = "Permission refusée"
            Case Else: GetLocalizedError = standardMsg
        End Select
    Else
        GetLocalizedError = standardMsg
    End If
End Function

Error Testing Helper

Sub TestErrorMessages()
    Dim testErrors() As Long
    Dim i As Integer
    ' Test specific error numbers
    testErrors = Array(5, 6, 7, 9, 11, 13, 52, 53, 54, 55, 57, 58, 61, 62, _
                       67, 68, 70, 71, 74, 75, 76, 91, 92, 93, 94)
    For i = LBound(testErrors) To UBound(testErrors)
        Debug.Print "Error " & testErrors(i) & ": " & Error(testErrors(i))
    Next i
End Sub

Advanced Usage

Error Mapper with Suggestions

Type ErrorInfo
    Number As Long
    Message As String
    Suggestion As String
End Type
Function GetErrorInfo(errorNumber As Long) As ErrorInfo
    Dim info As ErrorInfo
    info.Number = errorNumber
    info.Message = Error(errorNumber)
    ' Add helpful suggestions
    Select Case errorNumber
        Case 53
            info.Suggestion = "Check the file path and ensure the file exists."
        Case 61
            info.Suggestion = "Free up disk space or choose a different location."
        Case 70
            info.Suggestion = "Run the application as administrator or check file permissions."
        Case 91
            info.Suggestion = "Ensure the object is initialized with New or Set."
        Case 429
            info.Suggestion = "Verify that all required DLLs and components are registered."
        Case Else
            info.Suggestion = "Please contact technical support if the problem persists."
    End Select
    GetErrorInfo = info
End Function

Comprehensive Error Logger

Sub LogDetailedError(moduleName As String, procedureName As String, _
                     Optional additionalInfo As String = "")
    Dim fileNum As Integer
    Dim logPath As String
    Dim logEntry As String
    logPath = App.Path & "\logs\error_" & Format(Now, "yyyymmdd") & ".log"
    ' Build detailed log entry
    logEntry = String(80, "=") & vbCrLf
    logEntry = logEntry & "Timestamp: " & Format(Now, "yyyy-mm-dd hh:nn:ss") & vbCrLf
    logEntry = logEntry & "Module: " & moduleName & vbCrLf
    logEntry = logEntry & "Procedure: " & procedureName & vbCrLf
    logEntry = logEntry & "Error Number: " & Err.Number & vbCrLf
    logEntry = logEntry & "Error Message: " & Error(Err.Number) & vbCrLf
    logEntry = logEntry & "Error Source: " & Err.Source & vbCrLf
    If additionalInfo <> "" Then
        logEntry = logEntry & "Additional Info: " & additionalInfo & vbCrLf
    End If
    logEntry = logEntry & String(80, "=") & vbCrLf & vbCrLf
    ' Write to log file
    fileNum = FreeFile
    Open logPath For Append As #fileNum
    Print #fileNum, logEntry
    Close #fileNum
End Sub

Error Recovery System

Function AttemptRecovery(errorNumber As Long) As Boolean
    Dim errorMsg As String
    errorMsg = Error(errorNumber)
    AttemptRecovery = False
    Select Case errorNumber
        Case 53  ' File not found
            ' Try to create the file or directory
            On Error Resume Next
            MkDir GetParentDirectory(expectedFilePath)
            CreateDefaultFile expectedFilePath
            If Err.Number = 0 Then AttemptRecovery = True
            On Error GoTo 0
        Case 61  ' Disk full
            ' Try to clean temp files
            On Error Resume Next
            CleanTempFiles
            If GetFreeDiskSpace() > 1048576 Then AttemptRecovery = True
            On Error GoTo 0
        Case 70  ' Permission denied
            ' Prompt user to run as administrator
            MsgBox "This operation requires administrator privileges. " & _
                   "Please restart the application as administrator.", vbExclamation
            AttemptRecovery = False
        Case 91  ' Object not set
            ' Try to reinitialize object
            On Error Resume Next
            InitializeObjects
            If Err.Number = 0 Then AttemptRecovery = True
            On Error GoTo 0
    End Select
End Function

Error Statistics Tracker

Type ErrorStat
    ErrorNumber As Long
    ErrorMessage As String
    OccurrenceCount As Long
    LastOccurrence As Date
End Type
Private errorStats() As ErrorStat
Private statCount As Long
Sub TrackError(errorNumber As Long)
    Dim i As Long
    Dim found As Boolean
    ' Find existing error in stats
    found = False
    For i = 0 To statCount - 1
        If errorStats(i).ErrorNumber = errorNumber Then
            errorStats(i).OccurrenceCount = errorStats(i).OccurrenceCount + 1
            errorStats(i).LastOccurrence = Now
            found = True
            Exit For
        End If
    Next i
    ' Add new error to stats
    If Not found Then
        ReDim Preserve errorStats(0 To statCount)
        errorStats(statCount).ErrorNumber = errorNumber
        errorStats(statCount).ErrorMessage = Error(errorNumber)
        errorStats(statCount).OccurrenceCount = 1
        errorStats(statCount).LastOccurrence = Now
        statCount = statCount + 1
    End If
End Sub
Function GetErrorStatistics() As String
    Dim i As Long
    Dim report As String
    report = "Error Statistics Report" & vbCrLf
    report = report & String(80, "-") & vbCrLf & vbCrLf
    For i = 0 To statCount - 1
        With errorStats(i)
            report = report & "Error " & .ErrorNumber & ": " & .ErrorMessage & vbCrLf
            report = report & "  Occurrences: " & .OccurrenceCount & vbCrLf
            report = report & "  Last Seen: " & Format(.LastOccurrence, "yyyy-mm-dd hh:nn:ss") & vbCrLf & vbCrLf
        End With
    Next i
    GetErrorStatistics = report
End Function

Email Error Notification

Sub SendErrorNotification(errorNumber As Long, context As String)
    Dim emailBody As String
    Dim errorMsg As String
    errorMsg = Error(errorNumber)
    emailBody = "An error occurred in the application:" & vbCrLf & vbCrLf
    emailBody = emailBody & "Error Number: " & errorNumber & vbCrLf
    emailBody = emailBody & "Error Message: " & errorMsg & vbCrLf
    emailBody = emailBody & "Context: " & context & vbCrLf
    emailBody = emailBody & "User: " & Environ("USERNAME") & vbCrLf
    emailBody = emailBody & "Computer: " & Environ("COMPUTERNAME") & vbCrLf
    emailBody = emailBody & "Timestamp: " & Format(Now, "yyyy-mm-dd hh:nn:ss") & vbCrLf
    ' Send email (pseudo-code)
    SendEmail "admin@company.com", "Application Error", emailBody
End Sub

Error-Based Retry Logic

Function ExecuteWithRetry(operation As String, maxRetries As Integer) As Boolean
    Dim retryCount As Integer
    Dim errorMsg As String
    retryCount = 0
    Do
        On Error Resume Next
        ' Attempt operation
        ExecuteOperation operation
        If Err.Number = 0 Then
            ExecuteWithRetry = True
            Exit Function
        End If
        ' Get error message
        errorMsg = Error(Err.Number)
        ' Check if error is retryable
        Select Case Err.Number
            Case 57, 68  ' Device I/O error, Device unavailable
                retryCount = retryCount + 1
                If retryCount < maxRetries Then
                    Debug.Print "Retry " & retryCount & " after error: " & errorMsg
                    Sleep 1000  ' Wait before retry
                End If
            Case Else  ' Non-retryable error
                Debug.Print "Non-retryable error: " & errorMsg
                Exit Do
        End Select
        On Error GoTo 0
    Loop While retryCount < maxRetries
    ExecuteWithRetry = False
End Function

Error Handling Best Practices

' Good - Use Error function for logging and display
Sub ProcessFile(filePath As String)
    On Error GoTo ErrorHandler
    ' Processing code...
    Exit Sub
ErrorHandler:
    Dim errorMsg As String
    errorMsg = Error(Err.Number)
    LogError "ProcessFile", errorMsg
    MsgBox "Failed to process file: " & errorMsg, vbExclamation
    Err.Clear
End Sub
' Good - Compare with Err.Description
Sub CompareErrorSources()
    On Error Resume Next
    Dim x As Integer
    x = 1 / 0
    Debug.Print "Error function: " & Error(Err.Number)
    Debug.Print "Err.Description: " & Err.Description
    ' Both typically return the same message
End Sub

Performance Considerations

Comparison with Other Error Functions

Error vs Err.Description

' Error() - Returns message for specified or current error
msg = Error(53)          ' "File not found"
msg = Error()            ' Current error message
' Err.Description - Always current error message
msg = Err.Description    ' Current error message only

Error vs Err.Raise

' Error() - Retrieves error message (does not raise)
msg = Error(5)           ' Just gets the message
' Err.Raise - Raises an error
Err.Raise 5              ' Triggers error 5

Limitations

← Back to Environment | View all functions