You should seldom, if ever, use a control's Change event. It does exactly
what it says. It fires on every change of value in the control. That
translates to every keystroke, so it is not likely that is what you really
want.
It issue with using a control's Before Update event is that a user may enter
values in the form, but never enter or make a change to the control, so the
event will never fire. It is useful for checking the value entered, but not
reliable for comparing it's value to another control's value.
When you have multiple controls to validate, the best event to use is the
Form Before Update event because it can be canceled. That means the record
is not changed.
Typically, you would check each control you want to validate and if it does
not contain a correct value, you cancel the update, present a message box to
notify the user of the problem, and you can also set the focus to the
offending control. When you need to verify multiple controls whose values
depend on each other, then it is up to you to make the decision on where to
set the focus. But the basic principle is like this:
Private Sub Form_BeforeUpdate(Cancel As Integer)
If IsNull(Me.txtZipCode) Then
MsgBox "A Zip Code Is Required", vbExclamation, "Entry Error"
Cancel = True
Me.txtZipCode.SetFocus
Exit Sub
End If
If Me.txtStartDate > Me.txtEndDate Then
MsgBox "Start Date Must Be Before End Date", vbExclamation, "Entry
Error"
Cancel = True
Me.txtStartDate.SetFocus
Exit Sub
End If
etc.