Cómo ordenar alfabéticamente un formulario con combos enlazados

Normalmente tengo los registros de un formulario con varios cuadros combinados ordenados por un código numérico, pero en ocasiones me interesa que los registros se ordenen alfabéticamente por esos cuadros combinados. Para ello he creado un control que, al pulsarlo, alterna el orden numérico con el alfabético.

Suponiendo 3 cuadros combinados o combos que almacenan en la columna principal un número y en la secundaria un texto, que es lo que se ve en el formulario, llamados: ID1 ID2 ID3

Al pulsar el control se activa una macro que ordena los registros así:

"[Lookup_ID1].[Texto1], [Lookup_ID2].[Texto2], [Lookup_ID3].[Texto3]"

Esto me funcionaba. El problema me ha surgido cuando he decidido hacer dependiente el combo ID2 del combo ID1

Es decir, la selección de una opción en el combo ID1 ahora determina las opciones posibles del combo ID2, en lugar de como ocurría antes, en que era yo quien, manualmente, tenía que decidir, de todas las opciones del combo ID2, cuáles eran adecuadas en función de lo que hubiese seleccionado en el combo ID1.

Lo de enlazar los combos lo he hecho siguiendo ejemplos que he leído aquí, y funciona., actualizándose las opciones del combo 2 si modifico el combo 1. También puedo navegar por los registros del formulario apareciendo siempre los combos con las opciones correctas cuando paso de un registro a otro. Todo parece funcionar, menos lo de ordenar alfabéticamente los registros.

Al pulsar el control que cambia al orden alfabético, ya no funciona correctamente, porque la instrucción "Lookup_ID1].[Texto1], [Lookup_ID2].[Texto2], [Lookup_ID3].[Texto3]" no hace ni caso del contenido del Combo dependiente ID2

Y así, en vez de poner en primer lugar al registro:

ID1 Literatura

ID2 Narrativa

ID3 Vázquez Manuel

Y en segundo lugar al registro:

ID1 Literatura

ID2 Teatro

ID3 Abella, Fermín

Ordena correctamente los combos independientes ID1 e ID3, pero ignora el contenido del combo dependiente ID2, por lo que coloca primero a Abella, Fermín y después a Vázquez, Manuel

Supongo que lo que ocurre es que, al establecer el orden alfabético, la macro que lo hace debe antes actualizar los registros de alguna forma, pero no he descubierto cómo hacerlo.

Y esa es la pregunta: ¿Qué debo hacer para que los registros se ordenen alfabéticamente por el contenido de tres combos, cuando el combo 2 depende del combo 1?

El problema no solo se produce cuando cambio el contenido de alguno de los combos, sino siempre, incluso sin haber actualizado nada. De modo que si abro el formulario y sin cambiar nada paso al orden alfabético no funciona correctamente

Yo suelo trabajar con macros, pero si me dais la solución en VBA creo que me podré apañar.

1 respuesta

Respuesta
1

Eduardo, honestamente, no he entendido nada. Hablas de combinados, pero luego dices "ordenar los registros". Mira si tengo el formulario Clientes basado en la tabla del mismo Nombre

Puedes ver que están ordenados por nombres, pero si pulso el botón

Me los ordena por pais y dentro de cada uno por la primera letra del nombre. En este caso, en el evento Al hacer clic del botón le tengo puesto

Private Sub Comando33_Click()
Me.RecordSource = "select * from Clientes order by pais,left([nombrecliente],1)"
End Sub

Es decir, que el origen de registros del formulario sean los registros de la tabla Clientes ordenados, primero por el nombre del pais ascendente, y luego, dentro de cada pais, por la primera letra del nombre, también ascendente. Pero se pueden hacer mil combinaciones. 

¡Gracias! 

Pese a no haberme sabido explicar, tú lo has hecho perfectamente :-)

Lo que yo hacía, al pulsar el comando para cambiar el orden, era modificar la propiedad "ordenar por" del formulario. Esto me funcionó mientras los combos eran independientes (siguiendo tu ejemplo, permitiendo que el cliente "Frankenversand" fuese de cualquier país que figurase en el combo de países), pero cuando los enlacé (haciendo que las únicas opciones posibles para el cliente "Frankenversand" fuesen, por ejemplo, Alemania, Suiza o Austria) dejó de funcionar correctamente.

En cambio, al modificar el origen del formulario, los registros ya se ordenan correctamente.

Gracias de nuevo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas