Odenar Hojas de acuerdo a su nombre

Tengo varias hojas en un libro de excel, quiero ordenarlas pero solo las que cumplan la característica que es que su nombre es numérico de 7 caracteres. Como lo puedo hacer con una macros.

1 respuesta

Respuesta
1
Necesitas mediante una MACRO recorrer la colección de HOJAS y sí cumplen con tu condición entonces guardas el nombre de la hoja en un arreglo, cuando termines el recorrido ordenas el arreglo y luego comienzas a mover las hojas según el orden que obtuviste del arreglo.
Dim sHojas() As Variant
Dim nNumHoja As Integer
Sub OrdenaHojas()
Application.ScreenUpdating = False 'Congela la pantalla para que no se vea lo que la MACRO esta haciendo esto es opcional
ReDim sHojas(Sheets.Count)
nNumHoja = 0
Dim nPos As Integer
For Each shoja In Sheets
    If IsNumeric(shoja.Name) Then
       nNumHoja = nNumHoja + 1
       sHojas(nNumHoja) = shoja.Name
    End If
Next
Call OrdenaArreglo(sHojas, LBound(sHojas), UBound(sHojas))
'Reacomoda las hojas ordenadas
nPos = 0
For nNumHoja = LBound(sHojas) To UBound(sHojas)
    If Trim(sHojas(nNumHoja)) <> "" Then
        nPos = nPos + 1
        Sheets(sHojas(nNumHoja)).Select
        Sheets(sHojas(nNumHoja)).Move Before:=Sheets(nPos)
    End If
Next
Application.ScreenUpdating = True 'Refresca la pantalla
End Sub
Sub OrdenaArreglo(MiArreglo() As Variant, _
                   Limite_Inferior As Long, _
                   Limite_Superior As Long)
Dim i As Long, j As Long, x As Variant, y As Variant
i = Limite_Inferior
j = Limite_Superior
x = MiArreglo((Limite_Inferior + Limite_Superior) / 2)
While i <= j
    While (MiArreglo(i) < x) And (i < Limite_Superior)
        i = i + 1
    Wend
    While (x < MiArreglo(j)) And (j > Limite_Inferior)
        j = j - 1
    Wend
    If i <= j Then
        y = MiArreglo(i)
        MiArreglo(i) = MiArreglo(j)
        MiArreglo(j) = y
        i = i + 1
        j = j - 1
    End If
Wend
If Limite_Inferior < j Then OrdenaArreglo MiArreglo(), Limite_Inferior, j
If i < Limite_Superior Then OrdenaArreglo MiArreglo(), i, Limite_Superior
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas