Copiar hojas de excel a otro libro con vba

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.

Temario

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:

copiar hojas de excel a otro libro vba - Cómo copiar una hoja en Excel usando VBAPublic 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
CopySheetAndRename Copia y renombra con nombre ingresado Actual
CopySheetAndRenameByCell Copia y renombra con valor de celda Actual
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.

Subir