Organizar de manera numérica nombres de hojas de excel

Tengo un libro de excel en donfe los nombres de las hojas están nombradas así:

1.1-1.3-1.2-1.6-1.8-1.10-2.1-2.3-2.2-13.2-13.3-13.21

Pero al aplicar el siguiente codigo el orden queda asi:

1.1-1.10-1.2-1.3-1.6-1.8-2.1-2.2-2.3-13.2-13.21-13.3

Obsérvese que la hoja que se llama 1.10 debería estar a la derecha de la hoja 1.8 ya que el subíndice 10 es mayor que el subíndice 8. Lo mismo sucede con la hoja llamada 13.21 que debería estar a la derecha de la hoja 13.3

Este es el codigo que utilizo:

Sub OrdenarHojas_Descendente()

For a = 1 To Sheets.Count

    For s = a + 1 To Sheets.Count

        If UCase(Sheets(a).Name) < UCase(Sheets(s).Name) Then

            Sheets(s).Move Before:=Sheets(a)

        End If

    Next s

Next a

End Sub

Hay alguna manera de solucionar este problema.

1 Respuesta

Respuesta
1

Te anexo la macro para ordenar las hojas

Sub Ordenar_Hojas()
'Por Dante Amor
    '
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set h = Sheets.Add
    h.Cells.Clear
    fila = 1
    For i = 1 To Sheets.Count
        If InStr(Sheets(i).Name, ".") Then
            nums = Split(Sheets(i).Name, ".")
            entero = nums(0)
            decima = nums(1)
            h.Cells(fila, "A").Value = entero
            h.Cells(fila, "B").Value = decima
            fila = fila + 1
        End If
    Next
    u = h.Range("A" & Rows.Count).End(xlUp).Row
    With h.Sort
        .SortFields.Clear
        .SortFields.Add Key:=h.Range("A1:A" & u), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SortFields.Add Key:=h.Range("B1:B" & u), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange h.Range("A1:B" & u)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    For i = 1 To u
        hoja = h.Cells(i, "A").Value & "." & h.Cells(i, "B").Value
        Sheets(hoja).Move After:=Sheets(Sheets.Count)
    Next
    h.Delete
    Application.ScreenUpdating = True
    Sheets(1).Select
    MsgBox "Fin"
End Sub

'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas