Antes de nada, permiteme un comentario. Nunca le he visto utilidad ninguna a los formularios divididos. Pienso que lo ha "parido", aunque no sirva para nada, algún programador de Microsoft para justificar su trabajo y que lo lo despidan.
Por otro lado, si ya tienes Grupo, Familia y Referencia, ¿para qué quieres el campo Código? Basta con unir los anteriores.
Bueno, supongamos que tengo la tabla Productos, más o menos como en la imagen
Y también tengo un formulario Ventas con un subformulario DetalleVenta, que creo que es, más o menos, como tu subformulario.
Cuando pongo el cursor en el control Producto, aunque podría ser de otra forma, se abre el formulario Productos en vista diálogo y en modo Sólo Lectura. Te pongo en amarillo el producto seleccionado para que veas que lo pasa al subformulario
Elijo otro
Cuando cierro el formulario Productos
El código del evento Al recibir el enfoque del cuadro de texto Producto del subformulario es
Private Sub Producto_GotFocus()
If Me.NewRecord Then
DoCmd.OpenForm "productos", , , , acFormReadOnly, acDialog
End If
End Sub
Y el código del evento Al recibir el enfoque del control Producto del formulario Productos es
Private Sub Producto_GotFocus()
If CurrentProject.AllForms("ventas").IsLoaded Then
DoCmd.RunSQL "insert into detalleventa(codigo,producto,precio)values(grupo &"".""& familia &"".""& referencia,producto,precio)"
DoCmd.RunSQL "update detalleventa set idventa=forms!ventas!idventa where idventa is null"
Forms!ventas!DetalleVenta.Form.Requery
End If
End Sub
De forma, que si abres el formulario Productos, sin estar abierto el de ventas puedes "dar de alta" los productos sin problema ninguno.
Dicho todo esto, yo no lo haría así. Por ejemplo cambiaría los controles Grupo, Familia, Referencia y Producto del subformulario por combinados, de forma que me fuera limitando en cascada las familias, después de elegir una, las referencias, etc de forma que al final en el combinado Producto sólo me aparecieran aquellos correspondientes a ese grupo, familia y referencia.