Skip to Content
Course content

6.4 Logging Errors and Creating Robust Code.

Creating robust code is an essential skill for any VBA programmer. This involves writing code that is not only efficient but also resilient to errors, making it easier to maintain and debug. One of the most effective strategies for handling errors in VBA is logging, which allows you to capture and track errors as they occur during runtime. By logging errors, you can ensure that problems are identified and resolved quickly, leading to more reliable and stable code.

1. Why Error Logging is Important

Error logging is crucial because:

  • Traceability: It helps you track and understand what went wrong and when.
  • User-Friendly: It provides users or developers with helpful information in case of failures.
  • Debugging Efficiency: With logs, you can pinpoint issues without manually reproducing errors.
  • Maintenance: Over time, logs can serve as valuable resources for identifying patterns in code failures or bugs.

2. Basic Error Handling with VBA

Before diving into logging, it's essential to implement basic error handling in your VBA code. You can use the On Error statement to capture runtime errors and handle them appropriately.

Using On Error Statements:

  1. On Error GoTo: Directs VBA to a specific error-handling routine when an error occurs.
    Sub ExampleWithErrorHandling()
        On Error GoTo ErrorHandler
        ' Code that might cause an error
        Dim x As Integer
        x = 1 / 0  ' Division by zero (will cause an error)
        Exit Sub
    
    ErrorHandler:
        ' Handle error
        MsgBox "An error occurred: " & Err.Description
    End Sub
    
  2. On Error Resume Next: VBA will ignore the error and proceed to the next line of code.
    On Error Resume Next
    ' Code that might cause an error
    ' This will allow the program to continue even if an error occurs
    
  3. On Error GoTo 0: Disables the current error handler.
    On Error GoTo 0
    ' This will reset error handling to default behavior
    

3. Implementing Error Logging

Now that you know how to handle errors, you can implement logging to capture error details. A simple approach is to write error information to a text file, which can then be reviewed later.

Steps to Log Errors:

  1. Create a Subroutine for Logging: Define a procedure that writes error details, such as the error description, source code location, and timestamp, to a text file.
    Sub LogError(ByVal ErrorMessage As String, ByVal Source As String)
        Dim LogFile As Object
        Dim FilePath As String
        FilePath = "C:\ErrorLogs\VBA_ErrorLog.txt"  ' Set the path where logs will be stored
        
        ' Create the FileSystemObject
        Set LogFile = CreateObject("Scripting.FileSystemObject")
        If Not LogFile.FileExists(FilePath) Then
            Set LogFile = LogFile.CreateTextFile(FilePath, True)
        Else
            Set LogFile = LogFile.OpenTextFile(FilePath, 8)  ' Open for appending
        End If
    
        ' Write error details to the log file
        LogFile.WriteLine "Date/Time: " & Now
        LogFile.WriteLine "Error Message: " & ErrorMessage
        LogFile.WriteLine "Source: " & Source
        LogFile.WriteLine "--------------------------------------"
        
        LogFile.Close
    End Sub
    
  2. Call the Logging Procedure in Error Handling: Modify your error-handling routine to log any errors that occur.
    Sub ExampleWithLogging()
        On Error GoTo ErrorHandler
        
        ' Code that might cause an error
        Dim x As Integer
        x = 1 / 0  ' Division by zero (will cause an error)
        Exit Sub
    
    ErrorHandler:
        ' Log the error details
        Call LogError(Err.Description, "ExampleWithLogging")
        MsgBox "An error occurred. Please check the error log."
    End Sub
    
  3. Customizing the Log File Format: You can include additional information in the log file, such as:
    • Error Number (Err.Number)
    • Error Source (Err.Source)
    • Procedure Name (you can pass the procedure name as an argument)
    • Stack Trace (if needed, using the Erl keyword)
    Example of enhanced log message:
    LogFile.WriteLine "Error Number: " & Err.Number
    LogFile.WriteLine "Error Source: " & Source
    LogFile.WriteLine "Error Description: " & Err.Description
    

4. Best Practices for Error Logging

  • Use Clear and Descriptive Error Messages: Ensure that the error description includes details that are useful for troubleshooting.
  • Include Timestamps: Always log the time of the error to track when issues occur.
  • Log the Error Source: This helps you identify which part of the code caused the error.
  • Limit Logged Data: Avoid logging sensitive information like passwords or user data. Stick to general error information that helps with debugging.
  • Maintain Log Files: Ensure that logs are archived periodically to prevent files from becoming too large.

5. Creating Robust Code

Writing robust code involves not just handling errors, but also ensuring that your code is flexible, efficient, and can handle unexpected situations. Here are some tips for writing more robust code:

  • Validate Inputs: Always check user inputs or external data before using them. This helps prevent errors from occurring in the first place.
    If Not IsNumeric(UserInput) Then
        MsgBox "Invalid input, please enter a number."
        Exit Sub
    End If
    
  • Use Error Handling Liberally: Use On Error statements to handle potential errors throughout your code, ensuring that any errors are caught and managed gracefully.
  • Test Edge Cases: Make sure your code works in various scenarios, including extreme or edge cases that might break normal flow.
  • Graceful Failures: If an error occurs, try to fail gracefully by providing users with clear messages and options for recovery.

6. Summary of Error Logging and Creating Robust Code

Practice Description
Error Logging Log error details to a text file or other logging system for future analysis.
Error Handling Use On Error statements to catch and handle errors gracefully.
Logging Information Capture error number, description, source, and timestamp for easy debugging.
Input Validation Ensure that user inputs and external data are validated to avoid runtime errors.
Graceful Failure Provide users with meaningful messages and recovery options when an error occurs.

By logging errors effectively and following best practices for error handling, you can create VBA applications that are more resilient, easier to debug, and easier to maintain.

Commenting is not enabled on this course.