Cuadros combinados que recojan otros campos

Algo me obligabais a poner como título largo.
Buenas tardes.
Quisiera que en un subformulario, o formulario cuando así sea, al buscar en un cuadro combinado, por ejemplo de nombres y apellidos, se me rellenen unos cuadros de texto con el dni y el teléfono del nombre del cliente
No logro dar con ello.

Respuesta
2

Lo clásico es añadir esos datos en el origen de datos del Combo.
El combo tendrá más columnas -si se les pone a las columnas ancho cero serán invisibles- (en el combo).
En el evento adecuado del combo (hay varios a elegir) se muestran los datos de las columnas ocultas en los cuadros de texto haciendo referencia a la columna del combo.
Un ejemplo sencillo:
Origen del combo: “Select Nombre, Telefono, Cargo, Sueldo From Trabajadores”
En el diseño del combo:
- Numero de columnas (4)
- Ancho columnas = 2;0;0;0 (Solo será visible el nombre)
En el evento ‘Al cambiar’ se asignan los datos de las columnas ocultas:

Private Sub Cbo_Operarios_Change()
Me.Telefono = Me.Cbo_Operarios.Column(1)
Me.Cargo = Me.Cbo_Operarios.Column(2)
Me.Sueldo = Me.Cbo_Operarios.Column(3)
End Sub

Notas:
En VBA la numeración de las columnas comienza en cero
Me.Telefono, Me.Cargo, Me. Sueldo = cuadros de texto independientes en el formulario.

¡Muchas gracias! 
Lo pruebo y le digo.
Gracias por todo

Algo no he entendido de lo que me has explicado.
Como esto no admite subir pantallazos, te pongo lo que hay. Si no entendieras algo, dímelo, por favor.

El combo se llama: BuscaAsociado
En la pestaña formato, el número de columnas es:5 y los anchos; 0;5;0;0;0

Esto es el select, que me imagino entiendes todos los campos
SELECT PERSONAS.NIP, [Apellidos]+', '+[Nombre] AS Apenom, PERSONAS.NIF, PERSONAS.[E-Mail], PERSONAS.[Fecha Baja] FROM PERSONAS WHERE (((PERSONAS.[Fecha Baja]) Is Null)); Este último campo es para que no se vean las personas que están dadas de baja. Y el primero es el índice, que dá la BD, que llamamos NIP (número de identidad personal)

Los cuadros de texto a rellenar se llaman: TxNIFTit (origen del control:=[PERSONAS]![NIF]);TxEMailTit (origen del control: =[PERSONAS]![E-Mail])


En el evento "al cambiar", pongo esto:

Private Sub BuscaAsociado_Change()
Me.TxNIFTit = Me.BuscaAsociado.[NIF]
Me.TxEmailTit = Me.BuscaAsociado.[E-Mail]
End Sub

Me da: Error 438. El objeto no admite esta propiedad o método, y, al depurar, me resalte en amarillo la línea Me.TxNIFTit = Me.BuscaAsociado.[NIF]


Algo no he entendido bien de lo que me has dicho.

Creo que no tienes claro como se manejan los combos (y por extensión los cuadros de lista),
Una vez asignado el origen de datos, para el combo no existen ‘títulos’ que referencien a su contenido, en lugar de título utilizan el ordinal de la columna (su número) y por ello el comentario sobre que (en VBA) se comienza en cero (‘fuera’ de VBA las columnas comienzan en uno).
Si el combo se denomina ‘BuscaAsociado’ el dato NIP (es su columna cero) se referenciara así: Me. BuscaAsociado. Column(0)
Como la columna uno es visible, asumo que ese dato no se ‘reutiliza’por lo que el NIF será la columna (2), el Email la columna(3) y la fecha de baja estará en la columna (4).
El evento quedaría asi:
Private Sub BuscaAsociado_Change()
Me.TxNIFTit = Me.BuscaAsociado.Column(2)
Me.TxEmailTit = Me.BuscaAsociado.Column(3)
End Sub

Una curiosidad, si ‘TxNIFTit’ -por lo de ‘tit’- implica el titulo/cabecera de un objeto, se le tendría que indicar de forma expresa añadiendole el nombre de esa propiedad (CAPTION), esto es:
Me.TxNIFTit = ……..  Me.TxNIFTit.Caption = ……..
Un consejo (evitaras resultados extraños) Access utiliza como concatenador de texto (&), por compatibilidad admite (+) pero si encuentra un campo vacío lo asociara con un NULL …. Y si los textos puede interpretarlos como números, probablemente presente su suma.
Cuando solo interviene una tabla o no hay conflicto con los nombres de los campos, no se precisa la referencia a ella misma, lo cual permite simplificar la SQL que podría quedar así:
Original:
SELECT PERSONAS.NIP, [Apellidos]+', '+[Nombre] AS Apenom, PERSONAS.NIF, PERSONAS.[E-Mail], PERSONAS.[Fecha Baja] FROM PERSONAS ….
Modificado:
SELECT NIP, [Apellidos] & ', ' & [Nombre] AS Apenom, [NIF], [E-Mail], [Fecha Baja] FROM PERSONAS ….

2 respuestas más de otros expertos

Respuesta
2

Puede hacerlo en el evento Después de actualizar.

Private Sub TuCuadroCombinado_AfterUpdate()
    ' Asegúrate de que el cuadro combinado tiene un valor seleccionado
    If Not IsNull(Me.TuCuadroCombinado.Value) Then
        ' Rellena el cuadro de texto del DNI
        ' La primera columna es la 0, la segunda la 1, etc.
        ' Si IDCliente es la columna 0, Nombre Completo la 1, DNI la 2, Telefono la 3
        Me.txtDNI = Me.TuCuadroCombinado.Column(2) ' Columna del DNI (índice 2 para la tercera columna)
        ' Rellena el cuadro de texto del Teléfono
        Me.txtTelefono = Me.TuCuadroCombinado.Column(3) ' Columna del Teléfono (índice 3 para la cuarta columna)
    End If
End Sub

Explicación del código:

Me. TuCuadroCombinado. Column(X): Esta es la clave. La propiedad .Column() te permite acceder a los valores de las columnas del "Origen de la fila" de tu cuadro combinado.

Los índices de las columnas empiezan en 0. Si tu consulta tiene 4 columnas, sus índices serán 0, 1, 2 y 3.

Column(0) sería el IDCliente.

Column(1) sería el Nombre Completo.

Column(2) sería el DNI.

Column(3) sería el Teléfono.

Asegúrate de reemplazar TuCuadroCombinado con el nombre real de tu cuadro combinado y txtDNI, txtTelefono con los nombres reales de tus cuadros de texto.

Ejemplo Completo
Imagina que tienes una tabla Clientes con los campos IDCliente, NombreCompleto, DNI y Telefono.

Cuadro Combinado (ej. CmbClientes)

Origen de la fila: SELECT IDCliente, NombreCompleto, DNI, Telefono FROM Clientes ORDER BY NombreCompleto;

Número de columnas: 4

Anchos de columna: 0cm;8cm;0cm;0cm (para mostrar solo el nombre)

Cuadros de Texto (ej. TxtDNI, txtTelefono)

Asegúrate de tener estos cuadros de texto vacíos en tu formulario.

Código VBA en cmbClientes_AfterUpdate():

Private Sub cmbClientes_AfterUpdate()
    If Not IsNull(Me.cmbClientes.Value) Then
        Me.txtDNI = Me.cmbClientes.Column(2) ' DNI está en la tercera columna (índice 2)
        Me.txtTelefono = Me.cmbClientes.Column(3) ' Teléfono está en la cuarta columna (índice 3)
    End If
End Sub
Respuesta
1

I. Hola Antonio, en mi caso no sé realizar esta operación pero he visto una serie de respuestas anteriores muy cercanas creo a su consulta, y deseaba probar suerte por si aún no las hubiese visto. Le ruego me disculpe por todas las molestias de tanta lectura y la forma de responderle, ánimo.


https://www-access--programmers-co-uk.translate.goog/forums/threads/multi-combo-box-and-textbox-search.329067/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://www.access-programmers.co.uk/forums/threads/how-to-populate-a-text-box-and-field-based-on-combo-box-value.303277/ 

https://community-adobe-com.translate.goog/t5/acrobat-sdk-discussions/auto-populate-fields-based-on-combo-box-selection-acrobat-9-standard/td-p/9767577?profile.language=es&_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://community.spiceworks.com/t/auto-fill-text-boxes-on-a-form/625229 

https://chandoo-org.translate.goog/forum/threads/searchable-combo-box-in-user-form.36717/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://github-com.translate.goog/tailwindlabs/headlessui/discussions/1228?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://www.mrexcel.com/board/threads/display-full-text-of-selected-dynamic-combobox-in-textbox.916074/ 

https://stackoverflow.com/questions/53831755/search-in-a-combo-box 

https://stackoverflow.com/questions/48133260/display-records-in-access-db-combobox-on-any-text-typed-by-user 

https://www.accessforums.net/showthread.php?t=35262 

https://www.access-programmers.co.uk/forums/threads/auto-populate-a-text-box-based-on-the-selection-of-a-combo-box.247575/ 

https://www.youtube.com/watch?v=ZWXZhGLkfSA 

https://www.youtube.com/watch?v=tPu5QuFaNGw 

https://www.youtube.com/watch?v=DqoXAB2-7yY 

Muchas gracias por la molestia.
las veré y..., a ver cual me sirve.
Gracias de nuevo

I. Hola Compañero, muchas gracias, tardé en responder y no vi las respuestas previas de los expertos Enrique Feijóo y Eduardo Pérez Fernández, que creo dan en el clavo. Pero si también pudiese servirle alguno de los enlaces sería estupendo :) Ánimo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas