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]