Ordenar en VBA???

galileogali

Well-known Member
Joined
Oct 14, 2005
Messages
748
Es Posible Ordenar adentro de VBA?
Por ejemplo un Objeto Collection o un array, como para devolverlo a la Hoja previamente ordenado desde dentro de VBA?

Francamente, desconozco la respuesta.
Existe algun Metodo?

Gracias
GALILEOGALI
 

Excel Facts

Return population for a City
If you have a list of cities in A2:A100, use Data, Geography. Then =A2.Population and copy down.
Hola,

Tu pregunta esta un poco confusa, pero creo que la respuesta es sí.

Porque no ordenas usando la grabadora y luego ves el código?

Saludos.

Benjamín
 
Upvote 0
Gracias por tu respuesta. Pero veo que no me has entendido. Por lo que he visto y encontrado en la red en estos días, hay que recurrir a algunos algoritmos que van comparando de "a pares", el elemnto n con el n+1
No creo que haga falta aclarar mejor mi pregunta ya que quien tenga la respuesta, me va a entender. Hasta ahora he encontrado algun procedimiento que hace lo que quiero con Collections, calculo que sera posible adaptarlo a objetos Array, pero estoy a la espera de otras soluciones, para comparar y despues adaptar la que mas se adecue a cada caso en particular.
Futuras versiones de VBA, ¿no llegaran a inlcuir un Método SORT aplicable a Objetos Collection? Creo que sería esto sumamente Práctico.

Hasta Pronto.
 
Upvote 0
Tengo prisa hoy, pero ojalá que usted puede adaptar el siguiente a su situación. Es una rutina que hice en un class module que sortea una collección de objetos que son miembros de otro class module. Se organiza de acuerdo con una propiedad de ellos, strName. Esto es el tipo de sorteo más sencillo que hay creo pero para colleciones chicas no tarda nada. Espero que le ayude.
Code:
Public Sub Sort()
'¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    Dim i As Long, j As Long
    Dim bC As Byte, bR As Byte, bW As Byte, sN As String, sR As String
    Dim yB As Boolean, yW As Boolean
    
    For i = 1 To m_colFields.Count - 1
        For j = i + 1 To m_colFields.Count
            If UCase(m_colFields(i).strName) > UCase(m_colFields(j).strName) Then
                bC = m_colFields(j).bytCol
                bR = m_colFields(j).bytRow
                bW = m_colFields(j).bytWidth
                sN = m_colFields(j).strName
                sR = m_colFields(j).strRange
                yB = m_colFields(j).booHeadBefore
                yW = m_colFields(j).booHeadWith
                m_colFields(j).bytCol = m_colFields(i).bytCol
                m_colFields(j).bytRow = m_colFields(i).bytRow
                m_colFields(j).bytWidth = m_colFields(i).bytWidth
                m_colFields(j).strName = m_colFields(i).strName
                m_colFields(j).strRange = m_colFields(i).strRange
                m_colFields(j).booHeadBefore = m_colFields(i).booHeadBefore
                m_colFields(j).booHeadWith = m_colFields(i).booHeadWith
                m_colFields(i).bytCol = bC
                m_colFields(i).bytRow = bR
                m_colFields(i).bytWidth = bW
                m_colFields(i).strName = sN
                m_colFields(i).strRange = sR
                m_colFields(i).booHeadBefore = yB
                m_colFields(i).booHeadWith = yW
            End If
        Next j
    Next i
End Sub
 
Upvote 0
Gracias Greg!!!
Voy a probarlo. Espero poder manejar bien la inclusion en un Modulo de Clase....
Thanks...

GALILEOGALI
 
Upvote 0

Forum statistics

Threads
1,223,954
Messages
6,175,603
Members
452,658
Latest member
GStorm

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top