VBA Copiar Hoja de Cálculo

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on agosto 22, 2022

Este tutorial cubrirá cómo copiar una Hoja u Hoja de Trabajo usando VBA.

Copiar una hoja de cálculo a un nuevo libro de trabajo

Para copiar una Hoja de Trabajo a un nuevo Libro de Trabajo:

Sheets("Hoja1").Copy

Copiar la Hoja Activa a un nuevo Libro de Trabajo

Para copiar la Hoja Activa a un nuevo Libro de Trabajo:

ActiveSheet.Copy

Copiar varias Hojas en un nuevo Libro de Trabajo

Para copiar varias hojas en un nuevo libro de trabajo:

ActiveWindow.SelectedSheets.Copy

Copiar una Hoja dentro del mismo Libro de Trabajo

Comenzamos mostrando el ejemplo más sencillo de copiar Hojas: copiar Hoja(s) a un nuevo Libro de Trabajo. Los siguientes ejemplos le mostrarán cómo copiar una Hoja dentro del mismo Libro de Trabajo. Al copiar una Hoja dentro de un Libro de Trabajo, debe especificar una ubicación. Para especificar una ubicación, le dirá a VBA que mueva la Hoja de Trabajo antes o después de otra Hoja de Trabajo.

Copiar hoja antes de otra hoja

Aquí especificaremos que se copie y pegue la Hoja antes de la Hoja2

Sheets("Hoja1").Copy Before:=Sheets("Hoja2")

Copiar hoja antes de la primera hoja

En lugar de especificar el nombre de la Hoja, también puedes especificar la posición de la Hoja. Aquí estamos copiando y pegando una Hoja antes de la primera Hoja del Libro de Trabajo.

Sheets("Hoja1").Copy Before:=Sheets(1)

La Hoja recién creada será ahora la primera Hoja del Libro de Trabajo.

Copiar hoja antes de primera

 

Copiar hoja después de la última hoja

Usa la propiedad After para decirle a VBA que pegue la Hoja después de otra hoja. Aquí copiaremos y pegaremos una Hoja después de la última Hoja del Libro de Trabajo:

Sheets("Hoja1").Copy After:=Sheets(Sheets.Count)

Observa que hemos utilizado  Sheets.Count para contar el número de hojas del libro.

Copiar hoja al final

 

Mover Hoja

También puede mover una hoja dentro de un libro de trabajo utilizando una sintaxis similar. Este código moverá la Hoja1 al final del Libro de Trabajo:

Sheets("Hoja1").Move After:=Sheets(Sheets.Count)

Copiar y nombrar la hoja

Después de copiar y pegar una hoja, la nueva hoja creada se convierte en la hoja activa. Así que para renombrar nuestra nueva hoja, simplemente usa ActiveSheet.Name:

Sub CopiarHojaRenombrar1()
  Sheets("Hoja1").Copy After:=Sheets(Sheets.Count)
  ActiveSheet.Name = "Ultima Hoja"
End Sub

Si el nombre de la hoja ya existe, el código anterior generará un error. En su lugar podemos usar «On Error Resume Next» para decirle a VBA que ignore el nombre de la Hoja y proceda con el resto del procedimiento:

Sub CopiarHojaRenombrar2()
    Sheets("Hoja1").Copy After:=Sheets(Sheets.Count)
    On Error Resume Next
    ActiveSheet.Name = "Ultima Hoja"
    On Error GoTo 0
End Sub

O utilice nuestra función RangoExiste para probar si el nombre de la hoja ya existe antes de intentar copiar la hoja:

Sub CopiarHojaRenombrar3()
    If RangoExiste("UltimaHoja") Then
        MsgBox "La hoja ya existe"
    Else
        Sheets("Hoja1").Copy After:=Sheets(Sheets.Count)
        ActiveSheet.Name = "UltimaHoja"
    End If
End Sub

Function RangoExiste(hoja As String, Optional ByVal rango As String = "A1") As Boolean
    Dim prueba As Range
    On Error Resume Next
    Set prueba = ActiveWorkbook.Sheets(hoja).Range(rango)
    RangoExiste = Err.Number = 0
    On Error GoTo 0
End Function

Copiar y nombrar la hoja según el valor de la celda

También puede querer copiar y nombrar una hoja basándose en el valor de una celda. Este código nombrará la hoja de trabajo basándose en el valor de la celda A1

Sub CopiarHojaNombreDeCelda()

    Sheets("Hoja1").Copy After:=Sheets(Sheets.Count)
    On Error Resume Next
    ActiveSheet.Name = Range("A1").Value
    On Error GoTo 0

End Sub

Copiar Hoja de Trabajo a Otro Libro de Trabajo

Hasta ahora hemos trabajado con la copia de Hojas dentro de un Libro de Trabajo. Ahora cubriremos ejemplos para copiar y pegar Hojas a otros Libros de Trabajo. Este código copiará una Hoja al principio de otro Libro de Trabajo:

Sheets("Hoja1").Copy Before:=Workbooks("Ejemplo.xlsm").Sheets(1)

Esto copiará una Hoja de Trabajo al final de otro Libro de Trabajo.

Sheets("Hoja1").Copy After:=Workbooks("Ejemplo.xlsm").Sheets(Workbooks("Ejemplo.xlsm").Sheets.Count)

Observe que hemos sustituido 1 por Workbooks(«Ejemplo.xlsm «).Sheets.Count para obtener la última Hoja de Trabajo.

Copiar Hoja de Trabajo a un Libro de Trabajo Cerrado

También puede querer copiar una Hoja de Trabajo en un Libro de Trabajo que está cerrado. Este código abrirá un Libro de Trabajo cerrado para que pueda copiar una Hoja en él.

Sub copiarHoja_A_LibroCerrado()
Application.ScreenUpdating = False
 
    Set libroCerrado = Workbooks.Open("D:\Dropbox\excel\articulos\ejemplo.xlsm")
    Sheets("Hoja1").Copy Before:=libroCerrado.Sheets(1)
    libroCerrado.Close SaveChanges:=True
 
Application.ScreenUpdating = True
End Sub

Copiar hoja de otro libro de trabajo sin abrirlo

A la inversa, este código copiará una Hoja de Trabajo DESDE un Libro de Trabajo cerrado sin necesidad de abrir manualmente el libro.

Sub CopiarHojaDeLibroCerrado()
Application.ScreenUpdating = False
 
    Set libroCerrado = Workbooks.Open("D:\Dropbox\excel\articulos\ejemplo.xlsm")
    libroCerrado.Sheets("Hoja1").Copy Before:=ThisWorkbook.Sheets(1)
    libroCerrado.Close SaveChanges:=False
 
Application.ScreenUpdating = True
End Sub

Observe que en estos dos ejemplos hemos desactivado Screen Updating para que el proceso se ejecute en segundo plano.

Duplicar una hoja de Excel varias veces

También puede duplicar una hoja de Excel varias veces utilizando un bucle.

Sub CopiarHojaVariasVeces()
  Dim n As Integer
  Dim i As Integer
  On Error Resume Next
 
    n = InputBox("Cuantas copias quieres hacer?")
 
    If n > 0 Then
        For i = 1 To n
            ActiveSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count)
        Next
    End If
 
End Sub

Copiar hoja varias veces

 

vba-free-addin

Complemento de Ejemplos de Código de VBA

Acceda fácilmente a todos los ejemplos de código que se encuentran en nuestro sitio.

Simplemente navegue al menú, haga clic y el código se insertará directamente en su módulo. Complemento .xlam.

(¡No se requiere instalación!)

Descarga gratuita

Return to VBA Code Examples