Sino existe un código abrir formulario e ingresarlo y regresar

De antemano muchas gracias por compartir sus conocimientos y ayudarnos en nuestros casos con sus acertadas respuestas.

Les comento tengo mi formulario frm_pedidos donde tengo el campo o control llamado nit, que es el código de identificación tributaria, lo que deseo es que al ingresarlo lo valida con la tabla clientes y si lo encuentra pues me muestra la información pero sino lo encuentra deseo que me abra el formulario frm_clientes para poder grabar la información y regresar al formulario frm_pedidos ya con el código

Respuesta
1

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.

Muchas gracias, pero te comento que me me da error, es decir, si ingreso 1 solo código funciona, pero asumiendo que quiero cambiar el nit antes de presionar el botón de guardar, me dice que no puede modificar el campo hasta que no este almacenado el registro

¿Cuál de los 2 métodos está utilizando?

Estoy usando el segundo método, le hice algunos ajustes y me funciona a medias, porque me abre el formulario frm_clientes, pero da error al pasar el parámetro, "Se ha producido el error 2448 en tiempo de ejecución: No se puede asignar un valor a este objeto"

Esto me lo da en la instrucción cuando abro el formulario de frm_clientes

Private Sub Form_Open(Cancel As Integer)
If Not IsNull(Me.OpenArgs) Then


Me.Nit = Me.OpenArgs

End If
End Sub

Si no tiene información confidencial envíeme su base de datos a [email protected] y en el asunto me coloca su consulta.

Con gusto se lo envió mañana, que se me arruinó el cargador de mi laptop y no me he podido conectar

No hay problema cuando pueda me envía el archivo, por favor hacer referencia de su consulta en el Asunto.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas