VBA Copiar Hoja de Cálculo
In this Article
- Copiar una hoja de cálculo a un nuevo libro de trabajo
- Copiar varias Hojas en un nuevo Libro de Trabajo
- Copiar una Hoja dentro del mismo Libro de Trabajo
- Mover Hoja
- Copiar y nombrar la hoja
- Copiar Hoja de Trabajo a Otro Libro de Trabajo
- Copiar Hoja de Trabajo a un Libro de Trabajo Cerrado
- Copiar hoja de otro libro de trabajo sin abrirlo
- Duplicar una hoja de Excel varias veces
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 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.
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