Abrir formulario desde cuadro combinado en access 2016

Quiero abrir un formulario en access desde un cuadro combinado de selección de clientes, que el cuadro combinado muestre los clientes y que la primera opción sea nuevo cliente y al seleccionar nuevo cliente abra formulario clientes.

2 respuestas

Respuesta
3

No se si lo he entendido bien pero puedes probar a poner en las propiedades del combinado-Datos-Limitar a la lista=si y en Eventos-Al no estar en lista, crear un procedimiento de evento y entre Private Sub y End Sub poner:

Dim clientenuevo As Integer, título As String, mensaje As Integer
título = "El cliente que ha escrito no está en la lista"
mensaje = vbYesNo + vbDefaultButton1
clientenuevo = MsgBox("¿Desea agregar este cliente a la lista ?", mensaje, título)
    If clientenuevo = vbYes Then
    DoCmd.RunCommand acCmdUndo
DoCmd.OpenForm "clientes", acNormal, "", "", acAdd, acDialog

Response = acDataErrAdded
End If

Así, si en el combinado escribieras un cliente que no está en la lista, se abrirá una ventana advirtiéndotelo y que si quieres darlo de alta. Si le dices si, se abr el formulario Clientes en un registro nuevo y en vista diálogo. Anotas su datos y cuando cierres el formulario en el combinado ya te aparece ese cliente.

Respuesta
3

Si específicamente quieres un cuado combinado que muestre la opción "nuevo cliente" y a continuación los nombres de todos tus clientes registrados, podrías hacer una cosa así:

1º/ Establecer el "tipo de origen" de la fila del cuadro combinado (lo llamaré cboCliente) en "lista de valores"

2º/ En el evento "Al recibir el enfoque" de cboCliente el siguiente código:

Private Sub cboCliente_GotFocus()
Dim rst As DAO.Recordset
Dim miOrigen As String
'Empiezas por añadir la opción "Nuevo cliente"
miOrigen = Chr(34) & "[Nuevo Cliente]" & Chr(34) & ";" & Chr(34)
Set rst = CurrentDb.OpenRecordset("SELECT Cliente FROM TCLientes ORDER BY Cliente")
If rst.RecordCount <> 0 Then
    Do Until rst.EOF
        miOrigen = miOrigen & rst(0) & Chr(34) & ";" & Chr(34)
        rst.MoveNext
    Loop
End If
miOrigen = Left(miOrigen, Len(miOrigen) - 2)
Me.cboCliente.RowSource = miOrigen
Me.cboCliente.Requery
End Sub

Puedes ver una explicación del código aquí:

 http://siliconproject.com.ar/neckkito/index.php/component/content/article/96-ejemplos-explicados/ejemplos-de-controles/301-combo-con-opcion-de-seleccionar-todos 

3º/ En el evento "después de actualizar":

Private Sub cboCliente_AfterUpdate()
If Nz(Me.cboCliente, "") = "" Then Exit Sub
If Me.cboCliente = "[Nuevo Cliente]" Then
    DoCmd.OpenForm "FClientes", , , , acFormAdd
Else
End If
End Sub

Y en la parte del else lo que quieras que haga si el cliente ya existe (abrir el formulario de clientes en ese cliente, filtrar el formulario actual...).

Un saludo


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas