Barry,
Your problem is that VFP checks the data type for validtiy before your control gets its valid run. With a totally invlaid date your valid does not run. The solution is to SET NOTIFY ON, but do not return .F. from the vlaid when your code finds a problem. Instead RETURN 0 which will retain focus in the control but will not display the valid failure message.