How to track changes made to a specific sheet using VBA?

Tracking changes made to a specific sheet using VBA in Excel can be accomplished by utilizing the `Worksheet_Change` event. This event is triggered whenever a cell’s content changes on the specified worksheet. Below is a step-by-step guide to setting up change tracking with VBA:

Steps to Track Changes on a Specific Sheet

     Private Sub Worksheet_Change(ByVal Target As Range)
         Dim changedCell As Range
         Dim oldValue As Variant
         Dim newValue As Variant
         Dim changeLogSheet As Worksheet
         Dim nextRow As Long
         
         ' Specify the sheet where changes will be logged
         Set changeLogSheet = ThisWorkbook.Sheets("ChangeLog")
         
         ' Loop through each cell that has changed
         For Each changedCell In Target
             oldValue = changedCell.Value ' Fetching old value
             newValue = changedCell.Value ' Fetching new value

             ' Find the first empty row in the change log sheet
             nextRow = changeLogSheet.Cells(changeLogSheet.Rows.Count, 1).End(xlUp).Row + 1
             
             ' Log the change information
             With changeLogSheet
                 .Cells(nextRow, 1).Value = Now                      ' Timestamp
                 .Cells(nextRow, 2).Value = changedCell.Address      ' Cell address
                 .Cells(nextRow, 3).Value = changedCell.Parent.Name  ' Sheet name
                 .Cells(nextRow, 4).Value = oldValue                 ' Old value
                 .Cells(nextRow, 5).Value = newValue                 ' New value
             End With
         Next changedCell
     End Sub
  • Open VBA Editor:
    • Press `ALT + F11` to open the Visual Basic for Applications (VBA) editor.
  • Access the Desired Worksheet Module:
    • In the Project Explorer window, find the workbook that contains the sheet you want to track.
    • Locate the specific sheet under the “Microsoft Excel Objects” section.
    • Double-click the sheet name to open its code window.
  • Add the `Worksheet_Change` Event:
    • In the code window for the sheet, add the following VBA code:
  • Create a Change Log Sheet:
    • Make sure the workbook has a sheet named “ChangeLog” (or any name of your choosing, but update the code accordingly).
    • Set up headers such as “Timestamp”, “Cell Address”, “Sheet Name”, “Old Value”, “New Value” in the first row of this sheet.
  • Testing:
    • Make changes in the tracked sheet and observe that the changes are logged in the “ChangeLog” sheet with relevant details.

Notes:

  • Backup Your Workbook: Before running any macros, it’s a good practice to back up your work to prevent accidental data loss.
  • Logging Old Values: The above example assumes you are interested in logging the new value as there’s no built-in way to capture the old value directly through the `Worksheet_Change` event. For logging old values, additional setup or an approach involving third-party solutions might be necessary.
  • Optimize Performance: If tracking many cells or detailed information, consider the performance impact and test accordingly.

This basic setup lets you track who made what changes when and creates an audit trail directly in your workbook for easy review.

Unlock Your Potential

Excel

Basic - Advanced

Access

Access Basic - Advanced

Power BI

Power BI Basic - Advanced

Help us grow the project