There is no VBA documentbeforeclose event, so it is not surprising that it doesn't work
If you are going to use macros then you could validate the fields as you complete the form - http://www.gmayor.com/formfieldmacros.htm but you cannot force users to run the macros.
Personally I would not use legacy form fields. I would use content controls, which have their own exit events - but you still need macros.