Just a suggestion. Valid() has too many secrets.
What seems to work best for me is to "RETURN lflag" in the WHEN events of dependent fields. "lflag" would default to .F. when the primary [independent] field is empty, or [when] a Lostfocus() has determined the [independent] value entered is not valid. lFlag would be set to true when the primary field is not empty and the value entered was acceptable.
Imagination is more important than knowledge