Mover Hojas de Trabajo

Lo básico: mover con el método Move

Usa el método Move para mover una hoja y especifica el destino con Before (delante de una hoja) o After (detrás de una hoja).

Mover
Public Sub MoveSheet()
    ThisWorkbook.Worksheets("Sheet1").Move After:=ThisWorkbook.Worksheets("Sheet3")
End Sub
Si se omiten Before y After

Si no especificas ni Before ni After, la hoja se mueve a un libro nuevo (no se copia) y desaparece del libro original. Normalmente especifica siempre uno de los dos para que no ocurra por accidente.

Mover al inicio o al final

Mover
Public Sub MoveSheetToStart()
    With ThisWorkbook
        .Worksheets("Sheet1").Move Before:=.Worksheets(1)
    End With
End Sub
Mover
Public Sub MoveSheetToEnd()
    With ThisWorkbook
        .Worksheets("Sheet1").Move After:=.Worksheets(.Worksheets.Count)
    End With
End Sub

Worksheets.Count es el número de hojas de cálculo. Si quieres colocar la hoja también después de las hojas de gráfico, usa Sheets en lugar de Worksheets.

Diferencia entre Worksheets y Sheets

Worksheets contiene solo hojas de cálculo, mientras que Sheets incluye también hojas de gráfico. Los números de índice siguen el orden de las hojas en el libro (incluidas las ocultas).

Mover varias hojas a la vez

Pasa los nombres de las hojas como matriz con la función Array para moverlas en una sola llamada.

Mover
Public Sub MoveMultipleSheets()
    With ThisWorkbook
        .Worksheets(Array("Sheet1", "Sheet2")).Move After:=.Worksheets("Sheet4")
    End With
End Sub

La forma de especificar varias hojas es la misma que al seleccionarlas.

Seleccionar Hojas de Trabajo
Aprende a seleccionar hojas con el método Select de VBA en Excel: por nombre o índice, varias hojas a la vez y hojas que

Comprobar que las hojas existen

Si indicas el nombre de una hoja que no existe, se produce el error en tiempo de ejecución 9 («Subíndice fuera del intervalo»). Es más seguro comprobarlo antes.

Comprobar
Public Sub SafeMoveSheet()
    If Not SheetExists("Sheet1") Or Not SheetExists("Sheet3") Then
        MsgBox "La hoja de origen o de destino no existe."
        Exit Sub
    End If

    ThisWorkbook.Worksheets("Sheet1").Move After:=ThisWorkbook.Worksheets("Sheet3")
End Sub

Private Function SheetExists(ByVal sheetName As String) As Boolean
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name = sheetName Then
            SheetExists = True
            Exit Function
        End If
    Next ws
End Function

Mover a otro libro

Si indicas una hoja de otro libro en Before / After, la hoja se mueve a ese libro.

Mover
Public Sub MoveSheetToOtherWorkbook()
    Dim destination As Workbook
    Set destination = Workbooks("Report.xlsx") ' un libro abierto

    With destination
        ThisWorkbook.Worksheets("Sheet1").Move After:=.Worksheets(.Worksheets.Count)
    End With
End Sub

La hoja movida desaparece del libro original. Si quieres conservar la original, usa el método Copy.

Puntos a tener en cuenta

  • Referencias en fórmulas: al mover una hoja a otro libro, las fórmulas que hacen referencia a otras hojas pueden convertirse en referencias externas.
  • Protección: si la estructura del libro está protegida, Move produce un error.
  • Debe quedar al menos una hoja: no se puede vaciar un libro moviendo todas sus hojas visibles.

Resumen

  • Mueve una hoja con el método Move y Before o After
  • Si omites ambos, la hoja se mueve a un libro nuevo, así que ten cuidado
  • Se pueden indicar varias hojas a la vez con Array
  • Un nombre de hoja inexistente provoca el error 9, así que compruébalo antes
#VBA #Excel #Hoja