L'errore fa riferimento all'impostazione di una proprietà di un elemento che non è disponibile.
Cosa che accade quando da una maschera tenti di aggiornare un elemento di una maschera che non è aperta, oppure si trova in secondo piano.
Ed infatti da vb cerchi di impostare il setfocus di un elemento nella sottomaschera, Ma se la chiamata avviene dalla prima maschera, l'elemetno della seconda non è disponibile, anche se graficamente e visivamente sembra disponibile.
Inoltre l'errore di fondo è avere come fonte dati della maschera principale una tabella (chiamiamola tabella 1) e come fonte dati una query. (Chiamiamola query 1)
In realtà la fonte dati della maschera principale deve essere una query che contiene i dati della tabella 1 e della query 1, altrimenti, in fase di aggiunta di un nuovo record, non ci sarà correlazione tra i vari id, perchè quello della maschera principale rimarrà sempre lo stesso, mentre quello nella sottomaschera, dovrebbe variare in base a quello presente nella maschera principale.
Quindi in presenza di una relazione referenziale, ti genera errore, togliendo la coerenza referenziale, non ti genera errore, ma non si sa che cosa può accadere.
In base alle relazioni, ti potrebbe aggiungere record privi di chiave primaria collegata, modificare il primo record che trova con la chiave primaria corrispondente, impedire l'aggiunta.
Con quello che stai tentando di fare non stai usando una maschera principale ed una sottomaschera, ma una maschera principale ed una maschera collegata, anche se si trova in una unica form.
Quindi se vuoi usare la tipologia maschera sottomaschera, devi creare una query unica e darla in pasto alla maschera principale e collegare i campi master tra le due.
Se invece vuoi continuare come avevi pensato, devi usare la tecnica che si usa quando si è in presenza di una maschera collegata.
Quindi nella seconda maschera, ogni volta, dovrai posizionarti sul record giusto della prima maschera e solo dopo potrai modificare i dati della seconda, andando però contemporaneamente ad aggiornare gli id della seconda maschera e cancellare i valori immessi nella seconda maschera.
Ma mentre nella casistica classica di maschera più maschera collegata, la cosa si risolve in modo abbastanza agevole, perchè la seconda maschera si apre solo sul record con id giusto, in presenza di entrambe le maschere, devi gestire in manuale tutti gli aggiornamenti ogni qualvolta che ti sposti da una all'altra o da un elemento all'altro.
Fattibile, ma ci vuole molto più codice e una gestione impeccabile degli eventi tra le due maschere.