¿Cómo ordenar un cuadro de lista con origen de datos lista de valores?

Tengo un cuadro de lista que tiene en origen de datos la siguiente información, por ejemplo:

"Manzana"; "Naranja"; "Banana"; "Fresa"; Pera"

Necesito que al cargar el formulario el cuadro de lista muestre las palabras en el siguiente orden:

Banana

Fresa

Manzana

Naranja

Pera

1 respuesta

Respuesta
1

Le preparé el siguiente ejemplo, consta de 3 formas diferentes de ordenar un cuadro de lista cuando el "Tipo de origen de la fila" es una lista de valores.

1 Forma

Utilizo WizHook, debe hacer referencia a Microsoft Scripting Runtime.

Para este ejemplo utilizo el evento Al cargar.

Código para el cuadro de lista número 1.

 '1- Método con la función OrdenarLista
    'Crear una lista de valores
    Dim listaValores() As Variant
    Dim valor As Variant
    listaValores = Array("Manzana", "Naranja", "Banana", "Fresa", "Pera")
    'Agregar la lista de valores al cuadro de lista
    For Each valor In listaValores
        Me.Lista0.AddItem valor
    Next valor
    'Ordenar la lista de valores en el cuadro de lista
    Call OrdenarLista(Me.Lista0)

Observe que se requiere de la función OrdenarLista().Utilizo el método SortStringArray() de WizHook para ordenar la matriz y asigno la matriz ordena como origen de la fila del cuadro de lista con Join(). Esta es la forma más eficiente de ordenar un cuadro de lista, principalmente cuando tiene bastantes filas.

2. Forma

Ordenando el array antes de pasarlo a cuadro de lista.

 'Crear una lista de valores
   ' Dim listaValores As Variant
   ' listaValores = Array("Manzana", "Naranja", "Banana", "Fresa", "Pera")
    'Ordenar la lista de valores
    Call QuickSort(listaValores, LBound(listaValores), UBound(listaValores))
    'Agregar la lista de valores ordenada al cuadro de lista
    Dim i As Long
    For i = LBound(listaValores) To UBound(listaValores)
        Me.Lista2.AddItem listaValores(i)
    Next i

Observe que comenté las primeras líneas porque ya están definidas en el primer ejemplo, no obstante, si utiliza solamente esta forma debe des comentarlas.

Para este método se requiere llamar el procedimiento QuickSort() para ordenar la matriz.

Public Sub QuickSort(ByRef arr As Variant, ByVal iLeft As Long, ByVal iRight As Long)
    Dim i As Long
    Dim j As Long
    Dim pivot As Variant
    Dim temp As Variant
    i = iLeft
    j = iRight
    pivot = arr((iLeft + iRight) \ 2)
    Do While i <= j
        Do While arr(i) < pivot And i < iRight
            i = i + 1
        Loop
        Do While pivot < arr(j) And j > iLeft
            j = j - 1
        Loop
        If i <= j Then
            temp = arr(i)
            arr(i) = arr(j)
            arr(j) = temp
            i = i + 1
            j = j - 1
        End If
    Loop
    If iLeft < j Then Call QuickSort(arr, iLeft, j)
    If i < iRight Then Call QuickSort(arr, i, iRight)
End Sub

3. Forma

Tomando la lista de valores del formulario y haciendo uso de la función OrdenarLista()

Call OrdenarLista(Me.Lista4)

Los cuadros de lista tienen los nombres: lista0, lista2 y lista4.

¿Dónde se aplica ordenar el cuadro de lista? Personalmente lo utilizo cuando lleno un cuadro de lista con los campos de una tabla para realizar filtros y me gusta que aparezcan ordenados.

Como tengo su correo le estoy enviando el ejemplo, los usuarios de TodoExpertos que lo requieran pueden solicitarlo a [email protected]

Gracias, buena explicación en mi caso voy a utilizar la 3a opción.

Eduardo, admiro tus conocimientos de Access y gracias por compartirlos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas