There is no event that fires when “any” control is changed. In fact I not aware of any development platform that fires an event for any control unless you write code for each control – and that includes those event listener class’s that AGAIN require code for each control. (they tend to be a really brain dead solution since you wind up writing code for each control anyway!)
However, there is record level events for a given form. Thus if ANY control is changed, then the forms before update event will fire. And in that event, you can STILL at that point in time examine the old value (previous value) and the current value before the record is committed to the table.
So in the before update event you can go like this:
Private Sub Form_BeforeUpdate(Cancel As Integer)
' this event does not fire UNLESS the reocrd be change,
' send to debug window each control that been changed.
Dim myControl As Control
For Each myControl In Me.Controls
Select Case myControl.ControlType
Case acTextBox, acListBox, acComboBox
' text box control, check old vs new value
' but ONLY check for controls that are bound
' to data
If myControl.ControlSource <> "" Then
If myControl.OldValue <> myControl.Value Then
Debug.Print "control " & myControl.Name & " was Changeed from" & "" & _
Nz(myControl.OldValue, "") & " ->" & Nz(myControl.Value, "")
End If
End If
End Select
Next myControl
End Sub
The above will thus send to the debug window a "list" of controls that were changed by the user. I used a select case above since you may want special code for say a listbox, combo box etc.