Ordenar numéricamente cuadro de lista

Tengo un formulario con dos cuadros de lista, ambos con dos columnas y ambos usan items con la propiedad lista de valores.
La primera columna es numérica (del 1 al 32) y la segunda es texto (correspondiente a cada número)
Al hacer double_click en algún item, este desaparece del cuadro de lista1 y aparece en el cuadro de lista2 y viceversa (es decir, existen 32 items moviéndose entre los dos cuadros de lista).
Me gustaría un pedazo de código que ordene (de menor a mayor) los items de ambos cuadros de listas cada vez que ejecute el evento double_click.
Encontré este ejemplo bastante bueno, pero ordena alfabéticamente y sólo usa una columna, y la verdad no estoy familiarizado con casi nada del código que usa.
http://www.mvp-access.es/emilio/Descarga.asp?IdEjemplo=67

1 respuesta

Respuesta
1
Supongo que para que los registros pasen de una lista a otra tendrás alguna condición, yo he hecho una tabla (Tabla1) con los campos: código (numérico), detalle (texto) y Pas (Sí/No). Sí Pas=Verdadero ---> Lista1, si Pas=Falso ---> Lista2. He creado 2 Listas: Lista1 y Lista2, en origen de la fila pongo:
Para la Lista1:
SELECT Tabla1.Codigo, Tabla1.Detalle FROM Tabla1 WHERE (((Tabla1.Pas)=False)) ORDER BY Tabla1.Detalle;
Para la Lista2:
SELECT Tabla1.Codigo, Tabla1.Detalle FROM Tabla1 WHERE (((Tabla1.Pas)=True)) ORDER BY Tabla1.Codigo;
Al Hacer doble clic:
Para la Lista1:
DoCmd.RunSQL "Update Tabla1 Set Pas=True where Codigo=Form!Lista1.value"
Me. Refresh
Para la Lista2:
DoCmd.RunSQL "Update Tabla1 Set Pas=False where Codigo=Form!Lista2.value"
Me. Refresh
Como en el Select del origen del registro pongo Order By Código (O por lo que quieras ordenar) y en el procedimiento de evento al hacer doble clic pongo Me. Refresh (actualizame el formulario) consigo que siempre estén ordenadas ambas listas por el campo o campos de ordenación que he elegido en origen de fila.
Buenas tardes,
Funcionó muy bien e incluso quedo mejor ya que antes usaba lista de valores (escritos a mano) y ahora los datos los obtiene directo de la tabla.
Sin embargo hay un detalle que antes funcionaba y que ahora no logro resolver:
En este formulario los usuarios deben poder seleccionar (haciendo doble_click) uno a uno los items que desean cambiar del cuadro de lista 1 al 2 y viceversa, pero también deben poder cambiarlos todos al mismo tiempo (mediante un botón de comando)
Este es el código con el que trato de hacerlo, pero el item que es seleccionado automáticamente en cada ciclo no cambia de cuadro de lista. Te agradecería si tienes una solución para esto.
For i = 0 To lstUnidades2.ListCount
    j = lstUnidades2.ListCount
    [lstUnidades2].Selected(j - 1) = True
    DoCmd.RunSQL "Update UD Set Estado=False where [Código UD]=Form!lstUnidades2.value"
    Me.Refresh
Next i
Como anexo, pide confirmación cada vez que cambio un item de un cuadro a otro, lo cual es una verdadera molestia, pero lo solucione incluyendo las siguientes lineas. Al final vuelvo a cambiar los valores a 1
Application.SetOption "Confirm Record Changes", 0
Application.SetOption "Confirm Action Queries", 0
Application.SetOption "Confirm Document Deletions", 0
Muy agradecido!
Saludos
Si lo que quieres es pasar "todos" lo único que tienes que hacer es ejecutar la sql sin ninguna condición, es decir:
Para la Lista1:
DoCmd.RunSQL "Update Tabla1 Set Pas=True"
Me.Refresh
Para la Lista2: Pas=False
En cuanto a que te pida confirmación cada vez que actualices, borres o insertes un registro los puedes modificar en: Herramientas ---> Opciones ---> Modificar/Buscar, aquí en Confirmar chequeas o deschequeas a tu gusto (No es conveniente descrequear la confimación de "Eliminaciones de documento"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas