De la que hiciste, la transformé en dos.
Código:
Public Function CSortKey(c As Collection) As Collection
''Ordenar por la clave
Dim aTmp As New String[]
Dim cTemp As New Collection
Dim sText As String
For Each sText In c
aTmp.Add(c.Key & "\t" & sText)
Next
aTmp.Sort(gb.Ascent)
For Each sText In aTmp
cTemp[Split(sText, "\t")[0]] = Split(sText, "\t")[1]
Next
Return cTemp
End
Public Function CSortValue(c As Collection) As Collection
''Ordenar por el valor
Dim aTmp As New String[]
Dim cTemp As New Collection
Dim sText As String
For Each sText In c
aTmp.Add(sText & "\t" & c.Key)
Next
aTmp.Sort(gb.Ascent + gb.Language + gb.IgnoreCase)
For Each sText In aTmp
cTemp[Split(sText, "\t")[1]] = Split(sText, "\t")[0]
Next
Return cTemp
End
Supongo que según donde lo apliques, ordenar una colección tiene su interés.
Como su búsqueda es por la clave, siempre será más rápido que un array.
Pero desde luego tienes un problema, que no se pueden repetir las claves.
Saludos