Excel - ordenar los datos de un listbox

 
Vista:
Imágen de perfil de Jorge

ordenar los datos de un listbox

Publicado por Jorge (39 intervenciones) el 17/09/2021 04:16:05
Buenas noches, tengo una traba en mi formulario. Como se puede observar en la imagen, el formulario cuenta con dos ListBox. El primer listbox (ListBox1) se rellena mediante el combobox "unidad" al presionar el botón "buscar", con doble click, puedo pasar datos del listbox1 al listbox2 (listbox de la parte inferior).

En la parte superior hay dos marcos que contienen dos botones de opciones que tienen el propósito de ordenar los datos del listbox1 en forma ascendente o descendente.

Ejemplo: Selecciono la unidad "CZ-35 APURE" y quiero que se ordenen de forma ascendente/descendente por la "Emisión" y de forma ascendente/descendente por la "Nomenclatura".

Screenshot_6

Anexo código del formulario:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
Private Sub buscar_Click()
Dim DATAPAD, i As Long
 
DATAPAD = Hoja1.Range("A" & Rows.Count).End(xlUp).Row 'hoja data
 
ListBox1.Clear
ListBox2.Clear
 
'Aqui añadimos los datos al listbox1
For i = 2 To DATAPAD + 1
    If UCase(Hoja1.Cells(i, 5)) Like "*" & UCase(unidad) & "*" Then
        With ListBox1
            .AddItem
            .List(.ListCount - 1, 0) = Hoja1.Cells(i, 3) 'siglas
            .List(.ListCount - 1, 1) = Hoja1.Cells(i, 4) 'involucrado
            .List(.ListCount - 1, 2) = Hoja1.Cells(i, 2) 'cedula
            .List(.ListCount - 1, 3) = Hoja1.Cells(i, 18) 'Causa
            .List(.ListCount - 1, 4) = Hoja1.Cells(i, 22) 'tipo de orden
 
            If Hoja1.Cells(i, 25) = "" Then
                .List(.ListCount - 1, 5) = Hoja1.Cells(i, 24) 'nomenclatura
            Else
                .List(.ListCount - 1, 5) = Hoja1.Cells(i, 25) 'Nro. Oficio (Breve o Nota Informativa)
            End If
 
            .List(.ListCount - 1, 6) = Hoja1.Cells(i, 26) 'sustanciador
            .List(.ListCount - 1, 7) = Hoja1.Cells(i, 28) 'emision
        End With
    End If
Next i
 
resultado = "Se han encontrado " & ListBox1.ListCount & " registros"
End Sub
 
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean): On Error Resume Next
Dim Fila
 
Fila = Me.ListBox1.ListIndex
 
Me.ListBox2.AddItem ListBox1.List(Fila, 0)
Me.ListBox2.List(ListBox2.ListCount - 1, 1) = ListBox1.List(Fila, 1)
ListBox2.List(ListBox2.ListCount - 1, 2) = ListBox1.List(Fila, 2)
ListBox2.List(ListBox2.ListCount - 1, 3) = ListBox1.List(Fila, 3)
ListBox2.List(ListBox2.ListCount - 1, 4) = ListBox1.List(Fila, 4)
ListBox2.List(ListBox2.ListCount - 1, 5) = ListBox1.List(Fila, 5)
ListBox2.List(ListBox2.ListCount - 1, 6) = ListBox1.List(Fila, 6)
ListBox2.List(ListBox2.ListCount - 1, 7) = ListBox1.List(Fila, 7)
ListBox2.List(ListBox2.ListCount - 1, 8) = ListBox1.List(Fila, 8)
 
registros = "Se han seleccionado " & ListBox2.ListCount & " registros"
End Sub
 
'Eliminar un registro seleccionado
'
Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
If ListBox2.ListIndex >= 0 Then ListBox2.RemoveItem ListBox2.ListIndex
End Sub
 
'Devuelve la etiqueta del ListBox2 a su valor origen
'
Private Sub unidad_Change()
registros = "Cantidad de registros a enviar al Acta de Entrega"
End Sub
 
'Añade las unidades a la lista
'
Private Sub UserForm_Initialize()
Dim Lista As Long
 
Lista = Hoja2.Range("C2").End(xlDown).Row
unidad.RowSource = "opciones!C2:C" & Lista
End Sub
 
'Reinicia el formulario
'
Private Sub limpiar_Click()
Unload Me
frmActaEntrega.Show
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

ordenar los datos de un listbox

Publicado por Antoni Masana (2464 intervenciones) el 17/09/2021 12:01:18
Con el código escrito así ayuda a leerlo mejor.

A parte de esto no se cual es el problema o traba, has explicado lo que quieres hacer pero no lo que no consigues hacer.

Supongo que es el ordenar el ListBox1. Supongo que los datos los sacas de la hoja1 que no es lo mismo que de la "hoja1", bueno eso es otro problema que ya comentare.

Se puede hacer de varias formas y dependiendo del volumen de datos unas mejor que otras. Te cuento un par de ellas.

OPCIÓN - A
Al pulsar el botón Buscar crear una hoja de trabajo, cuidad si ya existe, copiar los datos filtrados.
Ordenar la tabla y cargar el ListBox1.
Si se modifica el tipo de orden volver a ordenar la tabla y volver a cargar el ListBox1

OPCIÓN - B
Esta es parecida a la anterior pero en lugar de una hoja meter los datos en una Array.
Ordenar la tabla y cargar el ListBox1
Si se modifica el tipo de orden volver a ordenar la tabla y volver a cargar el ListBox1

En el primer caso lo de ordenar lo hace Excel y en el segundo. El código para el primer caso es más simple de lo que parece que para el segundo.

No es tan complicado como pueda parecer.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
Private Sub buscar_Click()
    Dim DATAPAD, i As Long
 
    DATAPAD = Hoja1.Range("A" & Rows.Count).End(xlUp).Row 'hoja data
 
    ListBox1.Clear
    ListBox2.Clear
 
    'Aqui añadimos los datos al listbox1
    For i = 2 To DATAPAD + 1
        If UCase(Hoja1.Cells(i, 5)) Like "*" & UCase(unidad) & "*" Then
            With ListBox1
                .AddItem
                .List(.ListCount - 1, 0) = Hoja1.Cells(i, 3) 'siglas
                .List(.ListCount - 1, 1) = Hoja1.Cells(i, 4) 'involucrado
                .List(.ListCount - 1, 2) = Hoja1.Cells(i, 2) 'cedula
                .List(.ListCount - 1, 3) = Hoja1.Cells(i, 18) 'Causa
                .List(.ListCount - 1, 4) = Hoja1.Cells(i, 22) 'tipo de orden
 
                If Hoja1.Cells(i, 25) = "" Then
                    .List(.ListCount - 1, 5) = Hoja1.Cells(i, 24) 'nomenclatura
                Else
                    .List(.ListCount - 1, 5) = Hoja1.Cells(i, 25) 'Nro. Oficio (Breve o Nota Informativa)
                End If
 
                .List(.ListCount - 1, 6) = Hoja1.Cells(i, 26) 'sustanciador
                .List(.ListCount - 1, 7) = Hoja1.Cells(i, 28) 'emision
            End With
        End If
    Next i
 
    resultado = "Se han encontrado " & ListBox1.ListCount & " registros"
End Sub
 
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean): On Error Resume Next
    Dim Fila
 
    Fila = Me.ListBox1.ListIndex
 
    Me.ListBox2.AddItem ListBox1.List(Fila, 0)
    Me.ListBox2.List(ListBox2.ListCount - 1, 1) = ListBox1.List(Fila, 1)
    ListBox2.List(ListBox2.ListCount - 1, 2) = ListBox1.List(Fila, 2)
    ListBox2.List(ListBox2.ListCount - 1, 3) = ListBox1.List(Fila, 3)
    ListBox2.List(ListBox2.ListCount - 1, 4) = ListBox1.List(Fila, 4)
    ListBox2.List(ListBox2.ListCount - 1, 5) = ListBox1.List(Fila, 5)
    ListBox2.List(ListBox2.ListCount - 1, 6) = ListBox1.List(Fila, 6)
    ListBox2.List(ListBox2.ListCount - 1, 7) = ListBox1.List(Fila, 7)
    ListBox2.List(ListBox2.ListCount - 1, 8) = ListBox1.List(Fila, 8)
 
    registros = "Se han seleccionado " & ListBox2.ListCount & " registros"
End Sub
 
'Eliminar un registro seleccionado
'
Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    If ListBox2.ListIndex >= 0 Then ListBox2.RemoveItem ListBox2.ListIndex
End Sub
 
'Devuelve la etiqueta del ListBox2 a su valor origen
'
Private Sub unidad_Change()
    registros = "Cantidad de registros a enviar al Acta de Entrega"
End Sub
 
'Añade las unidades a la lista
'
Private Sub UserForm_Initialize()
    Dim Lista As Long
 
    Lista = Hoja2.Range("C2").End(xlDown).Row
    unidad.RowSource = "opciones!C2:C" & Lista
End Sub
 
'Reinicia el formulario
'
Private Sub limpiar_Click()
    Unload Me
    frmActaEntrega.Show
End Sub

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jorge

ordenar los datos de un listbox

Publicado por Jorge (39 intervenciones) el 17/09/2021 14:15:00
Efectivamente, los datos se toman de la hoja 1. Con la opción 2 no tengo mucha experiencia manejando la Array, con la opción 1 ¿usted me recomienda que obvie ordenar el listbox1 desde el formulario y mande los datos a una hoja nueva? Pero en tal caso que tenga muchos registros, me gustaría solo tomar ciertos datos que seleccionare del listbox1 y enviaré al listbox2, como serian muchos datos, si creo que seria necesario ordenar el listbox1 para encontrar con mayor rapidez los datos deseados, ya al final una vez que tengo esos datos deseados, al pulsar el botón "ENVIAR DATOS" (en la parte inferior del formulario) los datos del listbox2 se enviaran a una hoja. Como tal, la opción que planteo que es ordenar los datos del listbox1 es para facilitar la búsqueda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

ordenar los datos de un listbox

Publicado por Antoni Masana (2464 intervenciones) el 17/09/2021 18:18:34
A ver si lo entiendo.

1º - Se abre el formulario y lo primero que hay que hacer es seleccionar una opción en el ComboBox
- Deduzco que:
--- El botón BUSCAR UNIDAD no tiene efecto hasta que no seleccione en el ComboBox
--- El recuadro Organizar por Emisión no tiene efecto hasta que no se rellene el ListBox1
--- El recuadro Organizar por Nomenclatura no tiene efecto hasta que no se rellene el ListBox1
--- El botón ENVIAR DATOS no tiene efecto hasta que se llene el ListBox2
--- El botón LIMPIAR solo tiene efecto cuando se rellenen los ListBox.

2º - Después de seleccionar el ComboBox se debe pulsar el botón BUSCAR UNIDAD que debe rellenar el ListBox1 ordenado en función de los recuadros Organizar por ...
3º - Si se cambia una opción en los recuadros Organizar por ... se debe reordenar el ListBox1.
4º - Pulsando DobleClick en una fila del ListBox1 esta debe copiarse al ListBox2.
5º - Y el botón ENVIAR DATOS envía lo que hay en el ListBox2.

Y supongo que el problema esta en los puntos 2º y 3º.

Si me pasas el libro te muestro las dos opciones para que escojas la que mejor te convenga.
Y te hago algunos arreglillos en el código de cosas que quizás no tienes en cuanta y que evitaran errores.

Todo lo que realice estará explicado.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge

ordenar los datos de un listbox

Publicado por Jorge (39 intervenciones) el 17/09/2021 18:37:16
Profesor Antoni explicarlo mejor, es mejor imposible... asi mismo son los puntos planteados.
El formulario se abre desde la pestaña "DATAPAD 3.3" en la cinta de opciones, en el grupo de "Reportes"... botón "Acta de Entrega".
Ya en el Visual Basic, el formulario se llama "frmActaEntrega".
Tiene un formulario de acceso, el usuario es "diaz" y la contraseña "diaz23"
En varias ocasiones me ha ayudado con esta misma aplicación, y siempre ha sido un maestro en lo que me ha ayudado y aconsejado...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

ordenar los datos de un listbox

Publicado por Antoni Masana (2464 intervenciones) el 17/09/2021 19:29:52
Si en el ComboBox no hay nada seleccionado el botón Buscar lo muestra todo.

¿Esta bien así o solo debe mostrar lo que se indique en el ComboBox?

Cada vez que se pulsa el botón Buscar borra los dos ListBox ¿Correcto?

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge

ordenar los datos de un listbox

Publicado por Jorge (39 intervenciones) el 17/09/2021 19:53:24
si no hay nada en el combobox el listbox1 permanece en blanco y cada vez que se pulsa el boton buscar efectivamente borra los datos de ambos listbox...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

ordenar los datos de un listbox

Publicado por Antoni Masana (2464 intervenciones) el 17/09/2021 20:26:22
Ahora tengo un problema a la hora de organizar.

Al pulsar el botón busca si no hay ninguna opción de organizar seleccionada se muestran los datos tal cual están en la hoja.
Pulsa una opción en Organizar por Emisión y se ordena por el campo de Emisión. El orden no importa.
Ahora se pulsa en la opción Organizar por Nomenclatura y aquí viene la pregunta:

¿Se ordena por EMISION + NOMENCLATURA o por NOMENCLATURA + EMISION o solo por NOMENCLATURA?

Y a la inversa lo mismo

Al pulsar el botón busca si no hay ninguna opción de organizar seleccionada se muestran los datos tal cual están en la hoja.
Pulsa una opción en Organizar por Nomenclatura y se ordena por el campo de Emisión. El orden no importa.
Ahora se pulsa en la opción Organizar por Emisión y aquí viene la pregunta:

¿Se ordena por EMISION + NOMENCLATURA o por NOMENCLATURA + EMISION o solo por EMISION ?

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge

ordenar los datos de un listbox

Publicado por Jorge (39 intervenciones) el 17/09/2021 20:52:54
Profesor los puntos se interpretan tal cual ha dicho.

1- Al pulsar el botón busca si no hay ninguna opción de organizar seleccionada se muestran los datos tal cual están en la hoja.
2- Se ordena por EMISION + NOMENCLATURA, pero si solo se pulsa una solo opción de organización se organiza por la seleccionada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

ordenar los datos de un listbox

Publicado por Antoni Masana (2464 intervenciones) el 17/09/2021 22:30:59
Te envío el libro.

Dale un vistazo al código y pregunta si hay algo que no entiendes.
O si esta mal.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge

ordenar los datos de un listbox

Publicado por Jorge (39 intervenciones) el 17/09/2021 23:31:40
Ya lo estoy descargando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge

ordenar los datos de un listbox

Publicado por Jorge (39 intervenciones) el 18/09/2021 00:27:20
me da un error que se presenta en las imágenes que anexe, llegue a pensar que era por lo del formato de la columna que no era fecha asi que le puse una macro que convirtiera el formato de la columna "H" en fecha corta, pero sigue dando el mismo error.

Screenshot_1
Screenshot_7
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

ordenar los datos de un listbox

Publicado por Antoni Masana (2464 intervenciones) el 18/09/2021 01:38:58
El problema radica en esta línea i en la siguiente:

1
2
3
4
5
ActiveWorkbook.Worksheets("WORK").Sort.SortFields.Add2 _
                                  Key:=Range("H2:H" & Fila_Dest), _
                                  SortOn:=xlSortOnValues, _
                                  Order:=Orden_Emision, _
                                  DataOption:=xlSortNormal

Y no es que esta mal el comando es que la versión de Excel que tenemos es diferente y en tu versión no funciona lo que si funciona en la mía.
En tu versión hay que ponerlo así:

1
2
3
4
5
ActiveWorkbook.Worksheets("WORK").Sort.SortFields.Add _
                                  Key:=Range("H2:H" & Fila_Dest), _
                                  SortOn:=xlSortOnValues, _
                                  Order:=Orden_Emision, _
                                  DataOption:=xlSortNormal

Te adjunto una versión que funciona en los dos Excel.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jorge

ordenar los datos de un listbox

Publicado por Jorge (39 intervenciones) el 18/09/2021 02:21:46
Profesor Antoni pues ahora si la macro funciona, claro debí aclarar que la versión que uso es la 2010... nuevamente mil gracias por su valiosa ayuda le debo un café.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

ordenar los datos de un listbox

Publicado por Antoni Masana (2464 intervenciones) el 18/09/2021 18:05:43
Ahora que queda la otra opción que es en lugar de una hoja utilizar una array o tabla en memoria.
Es más rápido y un poco más complicado de ordenar, se necesita más código.
Si te interesa, aunque solo sea por curiosidad, te la hago la semana que viene.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge

ordenar los datos de un listbox

Publicado por Jorge (39 intervenciones) el 19/09/2021 03:04:24
Claro que si, lograr un objetivo con distintos métodos no esta demás.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

ordenar los datos de un listbox

Publicado por Antoni Masana (2464 intervenciones) el 21/09/2021 19:46:38
Te adjunto el archivo.

Es más rápido y más limpio que usar una hoja pero tiene cierta dificultad al ordenar, te cuento

No es lo mismo ordenar por varios campos que formen parte de una la única clave, que en tu caso se ordena por varios campos.
En el primer caso se ordena en el mismo orden toda la clave.
En el segundo cada clave puede tener un orden diferente. Y es aquí donde se complica el proceso de programar.

Hay que entender como funciona para hacerlo bien a la primera.
Tenemos dos campos A y B, cada uno puede tener un orden ascendente o descendente independiente.
¿Cómo se hace? Para empezar explico que el sistema que he utilizado para ordenar es el de la burbuja, comparo el 1º con el 2º, el 1º con el 3º, el 1º con el 4º, etc. hasta el último.
Después comparo el 2º con el 3º, el 2º con el 4º hasta el último.
Termina comparando el penúltimo con el último.

Comparo el 1º del campo A con el 2º del campo A, si son diferentes los intercambio si corresponde y paso a comparar el 1º del campo A con el 3º del Campo A.

¿Y cuando ordeno el campo B? solo y siguiendo el mismo procedimiento cuando los dos campos A son iguales.

Si esta explicación esta bien descrito el procedimiento podrás entender mejor el código de la versión 3.00

En la versión 2.00 todo esto lo resuelve Excel y la mayoría de código que lo da el propio Excel con la opción GRABAR MACRO, pero tiene sus desventajas ya que necesitas una hoja con todos los problemas que conlleva.

En el Versión 3.00 se lo tiene que currar uno mismo pero se aprende más.

Código Ordenar con Hoja

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    ' ---&--- Tipo de orden
 
    Orden_Emision = 0
    Orden_Nomencl = 0
 
    If Ascendente_Emision.Value Then Orden_Emision = xlAscending
    If Descendente_Emision.Value Then Orden_Emision = xlDescending
 
    If Ascendente_Nomencl.Value Then Orden_Nomencl = xlAscending
    If Descendente_Nomencl.Value Then Orden_Nomencl = xlDescending
 
    ' ---&--- Si hay algo que ordenar ordena
 
    If Orden_Emision > 0 Or Orden_Nomencl > 0 Then
        Application.Goto ActiveWorkbook.Sheets("WORK").Range("A1:H" & Fila_Dest)  ' .Select
        ActiveWorkbook.Worksheets("WORK").Sort.SortFields.Clear
 
        If Orden_Emision Then
            On Error GoTo Campo_1
            ActiveWorkbook.Worksheets("WORK").Sort.SortFields.Add2 _
                                              Key:=Range("H2:H" & Fila_Dest), _
                                              SortOn:=xlSortOnValues, _
                                              Order:=Orden_Emision, _
                                              DataOption:=xlSortNormal
            On Error GoTo 0
        End If
 
        If Orden_Nomencl > 0 Then
            On Error GoTo Campo_2
            ActiveWorkbook.Worksheets("WORK").Sort.SortFields.Add2 _
                                              Key:=Range("F2:F" & Fila_Dest), _
                                              SortOn:=xlSortOnValues, _
                                              Order:=Orden_Nomencl, _
                                              DataOption:=xlSortNormal
            On Error GoTo 0
         End If
 
         With ActiveWorkbook.Worksheets("WORK").Sort
            .SetRange Range("A1:H" & Fila_Dest)
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End If

Código ordenar con tabla:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
    ' ---&--- Tipo de orden
 
    Orden_Emision = 0
    Orden_Nomencl = 0
 
    If Ascendente_Emision.Value Then Orden_Emision = xlAscending
    If Descendente_Emision.Value Then Orden_Emision = xlDescending
 
    If Ascendente_Nomencl.Value Then Orden_Nomencl = xlAscending
    If Descendente_Nomencl.Value Then Orden_Nomencl = xlDescending
 
    ' ---&--- Si hay algo que ordenar ordena
 
    If Orden_Emision > 0 Or Orden_Nomencl > 0 Then
 
        For a = 1 To Punt - 1
            For b = a + 1 To Punt
                Texto_A = ""
                Texto_B = ""
 
                ' ---&--- Ordena el primer campo - EMISION
 
                ' --- Si se pone formato AMD
 
                If Orden_Emision > 0 Then
                    Texto_A = Format(Fecha(a), "YYYYMMDD")
                    Texto_B = Format(Fecha(b), "YYYYMMDD")
                Else
                    Texto_A = "00000000"
                    Texto_B = "00000000"
                End If
 
                ' --- Tipo de Orden
 
                                              Ordena = False
                If Orden_Emision = xlAscending Then
                    If Texto_A > Texto_B Then Ordena = True
                End If
 
                If Orden_Emision = xlDescending Then
                    If Texto_A < Texto_B Then Ordena = True
                End If
 
                ' ---&--- Ordena
 
                If Ordena Then
                    For C = 1 To 6
                        Tabla(0, 0) = Tabla(C, a)
                        Tabla(C, a) = Tabla(C, b)
                        Tabla(C, b) = Tabla(0, 0)
                    Next
                    Fecha(0) = Fecha(a)
                    Fecha(a) = Fecha(b)
                    Fecha(b) = Fecha(0)
                End If
 
                ' ---&--- Ordena por el segundo campo si los primeros son iguales
 
                If Texto_A = Texto_B Then
                                                          Ordena = False
                    If Orden_Nomencl = xlAscending Then
                        If Tabla(6, a) > Tabla(6, b) Then Ordena = True
                    End If
 
                    If Orden_Nomencl = xlDescending Then
                        If Tabla(6, a) < Tabla(6, b) Then Ordena = True
                    End If
 
                    ' ---&--- Ordena
 
                    If Ordena Then
                        For C = 1 To 6
                            Tabla(0, 0) = Tabla(C, a)
                            Tabla(C, a) = Tabla(C, b)
                            Tabla(C, b) = Tabla(0, 0)
                        Next
                        Fecha(0) = Fecha(a)
                        Fecha(a) = Fecha(b)
                        Fecha(b) = Fecha(0)
                    End If
                End If
            Next
        Next
    End If


Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jorge

ordenar los datos de un listbox

Publicado por Jorge (39 intervenciones) el 30/09/2021 07:55:28
Profesor Antoni esta genial también note que es mas optimizado, va mas rápido que el anterior
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar