Para ordenar hojas numeradas se puede usar una macro como esta, que se basa en el algoritmo de ordenamiento burbuja (buble sort). No he probado la macro exhaustivamente, pero parece arrojar buenos resultados (tenga en cuenta que las hojas con nombres no numéricos serán tratados por la macro como de valor 0 (cero). Si desea excluir una o varias hojas de la ordenación, haga uso de los argumentos Desde y Hasta como se indica más adelante) :
Public Sub OrdenarHojas(ByVal Desde As Long, ByVal Hasta As Long)
Dim i As Long
Dim j As Long
For i = Desde To Hasta - 1
For j = i + 1 To Hasta
If VBA.Val(Sheets(i).Name) > VBA.Val(Sheets(j).Name) Then
Sheets(j).Move before:=Sheets(i)
End If
Next j
Next i
End SubPara agrupar las hojas por el color de sus pestañas, pruebe con esta macro:
Public Sub AgruparColorHojas(ByVal Desde As Long, ByVal Hasta As Long)
Dim i As Long
Dim j As Long
For i = Desde To Hasta
For j = i + 1 To Hasta
If Sheets(i).Tab.ColorIndex = Sheets(j).Tab.ColorIndex Then
Sheets(j).Move after:=Sheets(i)
End If
Next j
Next i
End SubPuede llamar las macros indicando de qué hoja a qué hoja quiere ordenar o agrupar, por ejemplo, para agrupar todas las hojas de un libro, podría usar algo así:
Sub prueba()
Application.ScreenUpdating = False
OrdenarHojas Desde:=1, Hasta:=Sheets.Count
Application.ScreenUpdating = True
End SubObserve que estoy desactivando la actualización de pantalla antes de pasar a ordenar las hojas, ya que el procedimiento OrdenarHojas, al ir moviendo las hojas de una posición a otra, puede ser lento y si no se desactiva la actualización de pantalla se notará cómo se van cambiando de posición las hojas.
Tenga en cuenta que puede combinar ambas macros para lograr resultados combinados. Suponiendo que tiene hojas con nombres numéricos y con colores, y desea tanto ordenarlas como agruparlas, podría probar con:
Sub prueba()
Application.ScreenUpdating = False
OrdenarHojas Desde:=1, Hasta:=Sheets.Count
AgruparColorHojas Desde:=1, Hasta:=Sheets.Count
Application.ScreenUpdating = True
End SubEsto dará como resultado las hojas agrupadas por color y ordenadas para cada color.
También observe que puede ordenar sólo un rango de hojas, suponiendo que no quiere ordenar o agrupar las dos primeras hojas, podría probar con:
Sub prueba()
Application.ScreenUpdating = False
OrdenarHojas Desde:=3, Hasta:=Sheets.Count
Application.ScreenUpdating = True
End SubAl usar Sheets.Count se está indicando que se ejecute hasta el total de hojas en el libro activo. Si, por ejemplo, quisiera ordenar todas las hojas sin incluir la última, podría usar:
Sub prueba()
Application.ScreenUpdating = False
OrdenarHojas Desde:=1, Hasta:=Sheets.Count - 1
Application.ScreenUpdating = True
End SubCon una ligera modificación se puede usar la macro OrdenarHojas para que ordene hojas con nombres no numéricos, por ejemplo: "C", "D", "A", que pasaría a ser "A", "C", "D" tras ejecutar la macro:
Public Sub OrdenarHojas(ByVal Desde As Long, ByVal Hasta As Long)
Dim i As Long
Dim j As Long
For i = Desde To Hasta - 1
For j = i + 1 To Hasta
If Sheets(i).Name > Sheets(j).Name Then
Sheets(j).Move before:=Sheets(i)
End If
Next j
Next i
End Sub
0 comentarios:
Publicar un comentario en la entrada