01/08/2001
Automatizar la copia de hojas de Excel a otros libros es crucial para mejorar la eficiencia y evitar tareas repetitivas. Visual Basic for Applications (VBA) ofrece la solución perfecta, permitiendo copiar hojas individuales o múltiples, renombrarlas, y gestionar su ubicación en el libro de destino con precisión. Esta tutorial exhaustiva explorará diversas técnicas y macros VBA para dominar la copia de hojas de Excel.

Macros Básicas para Copiar Hojas
Comenzaremos con las funciones más sencillas para copiar hojas, perfectas para principiantes o tareas rápidas:
Copiar Hoja Activa a un Nuevo Libro
Esta macro copia la hoja activa a un nuevo libro de trabajo. Es la opción más simple y directa:
Public Sub CopySheetToNewWorkbook()
ActiveSheet.Copy
End Sub
Copiar Varias Hojas Seleccionadas
Si necesitas copiar múltiples hojas, selecciona las que desees y ejecuta esta macro:
Public Sub CopySelectedSheets()
ActiveWindow.SelectedSheets.Copy
End Sub
Copiar Hojas a Libros Existentes
Las siguientes macros permiten copiar hojas a un libro de trabajo ya existente, ofreciendo opciones para controlar la posición de la hoja copiada:
Copiar al Principio de Otro Libro
Esta macro copia la hoja activa al principio del libro especificado. Recuerda reemplazar "Bookxlsx" con la ruta y nombre del archivo de destino:
Public Sub CopySheetToBeginningAnotherWorkbook()
ActiveSheet.Copy Before:=Workbooks("Bookxlsx").Sheets(1)
End Sub
Copiar al Final de Otro Libro
Similar a la anterior, pero coloca la hoja al final del libro de destino:
Public Sub CopySheetToEndAnotherWorkbook()
ActiveSheet.Copy After:=Workbooks("Bookxlsx").Sheets(Workbooks("Bookxlsx").Worksheets.Count)
End Sub
Copiar a un Libro Abierto Seleccionado
Para mayor flexibilidad, esta macro utiliza un UserForm para seleccionar el libro de destino entre los abiertos. Requiere crear un UserForm con un ListBox y dos botones (CommandButton1 y CommandButton2). El código a continuación debe insertarse en el módulo del UserForm:
Public SelectedWorkbook As String
Private Sub UserForm_Initialize()
SelectedWorkbook = ""
ListBoxClear
For Each wbk In Application.Workbooks
ListBoxAddItem (wbk.Name)
Next
End Sub
Private Sub CommandButton1_Click()
If ListBoxListIndex > -1 Then
SelectedWorkbook = ListBoxList(ListBoxListIndex)
End If
Me.Hide
End Sub
Private Sub CommandButton2_Click()
SelectedWorkbook = ""
Me.Hide
End Sub
Luego, se utilizan las siguientes macros para copiar al principio o al final del libro seleccionado:
Public Sub CopySheetToBeginningAnotherWorkbook()
Load UserForm1
UserFormShow
If (UserFormSelectedWorkbook <> "") Then
ActiveSheet.Copy Before:=Workbooks(UserFormSelectedWorkbook).Sheets(1)
End If
Unload UserForm1
End Sub
Public Sub CopySheetToEndAnotherWorkbook()
Load UserForm1
UserFormShow
If (UserFormSelectedWorkbook <> "") Then
ActiveSheet.Copy After:=Workbooks(UserFormSelectedWorkbook).Sheets(Workbooks(UserFormSelectedWorkbook).Worksheets.Count)
End If
Unload UserForm1
End Sub
Copiar y Renombrar Hojas
Estas macros añaden la funcionalidad de renombrar la hoja copiada, ofreciendo opciones para definir el nombre manualmente o automáticamente:
Copiar y Renombrar con Nombre Predefinido
Esta macro copia la hoja y la renombra con un nombre establecido en el código ( "Test Sheet", modificable):
Public Sub CopySheetAndRenamePredefined()
ActiveSheet.Copy After:=Worksheets(Sheets.Count)
On Error Resume Next
ActiveSheet.Name = "Test Sheet"
End Sub
Copiar y Renombrar con Nombre Ingresado por el Usuario
Permite al usuario ingresar el nombre deseado para la hoja copiada:

Public Sub CopySheetAndRename()
Dim newName As String
On Error Resume Next
newName = InputBox("Enter the name for the copied worksheet")
If newName <> "" Then
ActiveSheet.Copy After:=Worksheets(Sheets.Count)
On Error Resume Next
ActiveSheet.Name = newName
End If
End Sub
Copiar y Renombrar Basado en el Valor de una Celda
Esta macro utiliza el valor de una celda específica para renombrar la hoja copiada. Se puede modificar la referencia de celda ( ActiveCell.Value o wks.Range("A1").Value ) según sea necesario:
Public Sub CopySheetAndRenameByCell()
Dim newName As String
On Error Resume Next
newName = InputBox("Enter the name for the copied worksheet", "Copy worksheet", ActiveCell.Value)
If newName <> "" Then
ActiveSheet.Copy After:=Worksheets(Sheets.Count)
On Error Resume Next
ActiveSheet.Name = newName
End If
End Sub
Public Sub CopySheetAndRenameByCell2()
Dim wks As Worksheet
Set wks = ActiveSheet
ActiveSheet.Copy After:=Worksheets(Sheets.Count)
If wks.Range("A1").Value <> "" Then
On Error Resume Next
ActiveSheet.Name = wks.Range("A1").Value
End If
wks.Activate
End Sub
Copiar Hojas de Libros Cerrados
Estas macros permiten copiar hojas sin necesidad de abrir el libro de origen:
Copiar Hoja de un Libro Cerrado
Esta macro abre un cuadro de diálogo para seleccionar el libro de origen y copia la hoja al final del libro activo. Luego, cierra automáticamente el libro de origen:
Public Sub CopySheetToClosedWorkbook()
Dim fileName, closedBook As Workbook, currentSheet As Worksheet
fileName = Application.GetOpenFilename("Excel Files (.xlsx), .xlsx")
If fileName <> False Then
Application.ScreenUpdating = False
Set currentSheet = Application.ActiveSheet
Set closedBook = Workbooks.Open(fileName)
currentSheet.Copy After:=closedBook.Sheets(closedBook.Worksheets.Count)
closedBook.Close (True)
Application.ScreenUpdating = True
End If
End Sub
Copiar Hoja de un Libro Cerrado sin Abrirlo
Esta macro copia una hoja específica de un libro cerrado sin necesidad de abrirlo. Recuerda modificar la ruta del archivo ( "C:\Users\XXX\Documents\Target_Book.xlsx" ) y el nombre de la hoja ( "Sheet1" ):
Public Sub CopySheetFromClosedWorkbook()
Dim sourceBook As Workbook
Application.ScreenUpdating = False
Set sourceBook = Workbooks.Open("C:\Users\XXX\Documents\Target_Book.xlsx")
sourceBook.Sheets("Sheet1").Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
sourceBook.Close
Application.ScreenUpdating = True
End Sub
Duplicar Hojas Múltiples Veces
Para duplicar una hoja varias veces, utiliza esta macro:
Public Sub DuplicateSheetMultipleTimes()
Dim n As Integer
On Error Resume Next
n = InputBox("How many copies of the active sheet do you want to make?")
If n >= 1 Then
For numtimes = 1 To n
ActiveSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count)
Next
End If
End Sub
Tabla Comparativa de Macros
| Macro | Descripción | Libro Destino | Renombrado |
|---|---|---|---|
| CopySheetToNewWorkbook | Copia hoja activa a nuevo libro | Nuevo | No |
| CopySelectedSheets | Copia hojas seleccionadas a nuevo libro | Nuevo | No |
| CopySheetToBeginningAnotherWorkbook | Copia hoja activa al principio de un libro | Existente | No |
| CopySheetToEndAnotherWorkbook | Copia hoja activa al final de un libro | Existente | No |
| CopySheetAndRenamePredefined | Copia y renombra con nombre predefinido | Actual | Sí |
| CopySheetAndRename | Copia y renombra con nombre ingresado | Actual | Sí |
| CopySheetAndRenameByCell | Copia y renombra con valor de celda | Actual | Sí |
| CopySheetToClosedWorkbook | Copia hoja de libro cerrado | Seleccionado | No |
| CopySheetFromClosedWorkbook | Copia hoja de libro cerrado sin abrirlo | Actual | No |
| DuplicateSheetMultipleTimes | Duplica hoja múltiples veces | Actual | No |
Consultas Habituales
- ¿Cómo copiar una hoja de Excel a otro libro sin VBA? Se puede copiar manualmente arrastrando la pestaña de la hoja al nuevo libro.
- ¿Cómo copiar una hoja protegida con VBA? Se requiere desactivar la protección de la hoja antes de copiarla usando el método .Unprotect , y luego volver a protegerla con .Protect después de la copia.
- ¿Cómo manejar errores al copiar hojas con VBA? Utilizar la instrucción On Error Resume Next permite controlar posibles errores durante el proceso de copia.
- ¿Cómo copiar solo ciertos rangos de una hoja con VBA? Se puede copiar un rango específico utilizando el método .Copy con la referencia del rango.
Esta tutorial proporciona una base sólida para copiar hojas de Excel usando VBA. Recuerda adaptar las macros a tus necesidades específicas y explorar las funcionalidades adicionales que VBA ofrece para manipular hojas y libros de trabajo.
Si quieres conocer otros artículos parecidos a Copiar hojas de excel a otro libro con vba puedes visitar la categoría Libros y Librerías.
