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).
Public Sub MoveSheet()
ThisWorkbook.Worksheets("Sheet1").Move After:=ThisWorkbook.Worksheets("Sheet3")
End Sub
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
Public Sub MoveSheetToStart()
With ThisWorkbook
.Worksheets("Sheet1").Move Before:=.Worksheets(1)
End With
End Sub
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.
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.
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.
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.
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.
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,
Moveproduce 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
MoveyBeforeoAfter - 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