A family of Microsoft relational database management systems designed for ease of use.
Is there a way to (and would it make sense to) determine that all that has happened is that a subform has taken (or has) the focus, and if so to just bail out of the BeforeUpdate event (or skip the form completion check)?
That would be too late in the day to 'bail out'. In any event 'bailing out' would mean allowing the parent form's current record to be saved by not setting the return value of the Cancel argument to True, which is what you are trying to prevent in the first place. Once you've done that it won't execute again, so there would be no validation whatsoever.
It would be possible with a little more work to extend the code in my demo form's module to do all the validation, and therefore allow you to avoid the use of the BeforeUpdate event procedure completely. You'd need to extend the criteria for the DLookup function call so that in addition to testing for a row in families with no match in FamilyMembers by means of the subquery, it also tests for Nulls in any of the mandatory columns in Families. This would allow you to move to the subform without validating the parent form's controls, but while it would work in practice in the way you envisage, I would not be happy with such a solution as it would mean that the mandatory columns in Families would each have to allow Null in the table definition, prejudicing the integrity of the table.
My demo does not do any validation on Families of course as it is not designed to illustrate this, and Families is just a single column table.