# Ordenar en VBA???



## galileogali (Feb 9, 2006)

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


----------



## bmacias (Feb 11, 2006)

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


----------



## galileogali (Feb 12, 2006)

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.


----------



## Greg Truby (Feb 13, 2006)

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. 
	
	
	
	
	
	



```
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
```


----------



## galileogali (Feb 13, 2006)

Gracias Greg!!!
Voy a probarlo. Espero poder manejar bien la inclusion en un Modulo de Clase....
Thanks...

GALILEOGALI


----------

