Checking whether a required field contains data or is empty, on the form level, has to be done the in Form_BeforeUpdate event, otherwise the user could simply not enter the textbox and no flag would be raised.
Checking the validity of entered data in a control can be done either in the control's or the form's BeforeUpdate event. Placing validity code in the OnExit or LostFocus event is inefficient, because it'll run the check every time the user tabs thru the given control , whether data is entered/edited or not.
There is a form level event that fires when a control has data entered or data is changed, the Form_Dirty event. The problem with using this event is that it only fires once. If TextboxA is changed, Form_Dirty fires. If TextboxB is then changed, Form_Dirty doesn't fire again. So the validation code placed here wouldn't run the second time a control was altered.
Writing a public function to check all textboxes to insure that each one has data (is not Null) would be worthwhile, especially if you had multiple forms you wanted to do the same with. But if by checking whether the entries are valid you mean does the SSN field have 9 digits and no alpha characters, does the date field have a date that is in the future, is the percent field equal to or less than 100% etc., writing a public function to handle this becomes another matter entirely, and probably pointless, since it only applies to the one form. If it only applies to a single form, place it in that form.
As Geordie has already figured out, to insure that something that concerns a certain control is done each time that control is changed, you have to have individual code for that control tied to that control, or check that control in the Form_BeforeUpdate event.
Bob's suggestion on Conditional Formatting is a good one if all you want to do is mark empty fields or fields where the data doesn't meet certain criteria by changing the background color. But you cannot use this, of course, if you actually need to prevent the record from being saved unless the data is entered and correct.
Conditional Formatting also has the advantage of working in all form views, while changing colors in VBA code, in a Datasheet or Continuous view form, will format the control in all records according to the value on the current record.
Using VBA code to just change the color of a given control in a given record also requires placing code in the Form_Current event in order for the current record to be formatted correctly. Using Conditional Formatting also avoids having to do this.