1. FORMA
Si utiliza un cuadro combinado puede utilizar el código siguiente, en el evento "Al no estar en la lista":
Private Sub cboCliente_NotInList(NewData As String, Response As Integer)
Dim intReply As Integer
intReply = MsgBox("El Cliente'" & NewData & _
"' No está en la lista, quiere adiconarlo ?", vbYesNo, "Registrando Pedido)
If intReply = vbYes Then
'Abre el formulario frm_clientes pasando los nuevos
'datos en el paramétro OpenArgs
DoCmd. OpenForm "frm_clientes",,,, acFormAdd, acDialog, NewData
'Registro añadido cancelamos el procedemiento predeterminado de Acces
Response = acDataErrAdded
Else
MsgBox "Por favor seleccione un Cliente de la lista", vbInformation, "Registrando Pedido"
'Tratamos el error y decimos a Access que continúe
Response = acDataErrContinue
End If
End Sub
La propiedad Limitar a lista en la pestaña Datos debe estar en Sí.
2. FORMA
Si no utiliza Cuadro combinado sino un control cuadro de texto, en el evento después de actualizar, algo como:
Sub ctlnit_AfterUpdate()
'Buscamos el nit, supongamos que es de tipo texto
Dim lnNit As Long
lnNit=nz(dlookup("[idnit]","tablaclientes","nit=" & Me.ctlnit,0)
If lnNit=0 then
MsgBox("El nit " & ctlnit & " no existe, ¿Lo va a adicionar?",vbyesno+vbquestion,"NIT")=vbNo then
Exit Sub
Else ' Abrimos el formulario clientes
DoCmd.OpenForm "frm_clientes", , , , acFormAdd, acDialog, Me.ctlnit
End If
En Sub
Ahora, en el formulario frm_clientes se debe detectar si se ha pasado un argumento, en este caso, el contenido en el control ctlnit.
En el evento Al abrir:
Private Sub Form_Open(Cancel As Integer)
IF Not Isnull(Me.OpenArgs) then
Me.Nit=Me.OpenArgs
End If
En Sub
Espero le sirva, es una idea, seguro que hay más opciones.