Se puede copiar una hoja del libro del Excel mediante los siguientes pasos:
- Click derecho en el nombre de la hoja
- Seleccionar “mover o copiar”
- Aparecerá una ventana en donde elegimos la hoja a copiar
- Seleccionaremos el libro, la ubicación y activaremos “Crear una copia”.
- Click en aceptar y se generará una copia.
Otra forma tradicional es crear una hoja nueva, darle el nombre y pasar los datos de la hoja original a la nueva.
Pero, ¿Qué pasaría si tengo una base de datos y me piden separar la información en “n” número de hojas? Y si tengo que hacer un Backup de la información antes de ejecutar una macro, ¿Lo haría manualmente o lo incluiría dentro de ella? En estas situaciones, los métodos tradicionales no serían eficientes. Es ahí donde entra el VBA. Antes de iniciar, repasemos la diferencia entre dos conceptos importantes del lenguaje VBA, los objetivos:
- Workbook: Se refiere a un libro de Excel.
- Worksheet: Representa una hoja del libro.
Asimismo, un libro puede tener más de una hoja, lo cual significa que un objeto Workbook puede tener más de un objeto Worksheet. Dicho esto, podemos especificar cuál sería el código VBA para copiar hojas dentro de un libro o entre diferentes libros.
A continuación se mostrará como copiar una hoja aplicar el VBA:
¿Cómo copiar en el mismo libro?
a) Primero abramos el libro Excel y entremos al VBA
b) Coloquemos la opción insertar módulo.
c) Al hacer esto, estaremos listos para utilizar la siguiente instrucción:
ActiveWorkbook.Sheets("Principal").Copy After:=ActiveWorkbook.Sheets("Backup")
Recuerde que entre los paréntesis, debe ir con comillas el nombre de la hoja: primero la que será copiada (“Principal”) y en el segundo paréntesis, la referencia del lugar en donde se copiará (“Backup”). Este último será un indicador para el Excel en copiar antes o después de la hoja nombrada. En la instrucción dada, la hoja de referencia es “Backup”, y el parámetro que indica la posición de la copia es “After”, es decir, la copia irá luego de ella. Tenga mucho cuidado con el nombre de las hojas en VBA, ya que debe coincidir con su nombre en el Excel, de lo contrario no se ejecutará la macro. Como resultado, tendrá la hoja “Principal (2)” copiada después de la hoja Backup, como se aprecia en la siguiente imagen.
Ahora, si quisiéramos colocar la copia antes de la hoja “Backup”, el parámetro será:
“Before”: Worksheets (“Principal”).Copy Before:=Worksheets (“Backup”)
Por otra parte, si la posición que se desea es al final de todas las hojas que se tenga en un libro, se puede usar la propiedad “Sheets.Count”, que nos da el número de hojas totales que tenemos. El código sería:
Worksheets (“Principal”).Copy After: =Sheets (Sheets.Count)
Asimismo, es posible utilizar la posición de la Hoja dentro de Worksheets, en este ejemplo, la hoja “Principal” es la número uno, entonces:
Worksheets (1).Copy After:=Sheets (Sheets.Count)
¿Cómo copiar en distinto libros?
Si queremos hacer la copia hacia un libro diferente se debe especificar el libro origen y el libro destino. Pondremos un ejemplo, copia la primera hoja del Libro 1 al Libro2, luego de la segunda hoja. Para ello, se necesita la siguiente instrucción:
Workbooks(“Libro1”).Worksheets(1).Copy After:=Workbooks(“Libro2”).Sheets(2)
Es importante recordar que ambos libros deben estar abiertos para que funcione la macro.
¿Cómo copiar una hoja en “n” número de veces?
Lo primero que debemos hacer es definir las dos variables que utilizaremos:
a) La primera variable, que llamaremos “hoja”, recogerá la hoja activa (que es la que copiaremos). Para definirla usamos el siguiente código:
Dim hoja as Worksheet Set hoja = ActiveWorkbook.ActiveSheet
b) Luego, definiremos la variable “num” como el número de veces que queremos copiar la hoja seleccionada. Ya que se trata de un valor numérico, la definimos de la siguiente manera: Dim num as Integer. Si queremos que el usuario elija cuántas copias quiere crear, necesitamos que nos dé esa información. Para eso, usaremos un InputBox y asignaremos el valor que el usuario introduzca a la variable “num”. num = InputBox("¿Cuántas copias de la hoja quiere crear?", "Número de copias") Necesitamos que el número de copias sea igual o mayor a 1, ya que cualquier otro caso no tendría sentido. Para ello tendremos que crear esa esa condición y, de lo contrario, mostraremos un mensaje de error. En caso el número sea válido, procedemos a copiar la hoja. Ya que debemos hacerlo tantas veces como señale la variable “num”, usamos el código: For x = 1 to num. Por lo tanto, el código completo a utilizar sería el siguiente:
Sub CopiarHojas()
'Definimos las variables
Dim hoja As Worksheet
Set hoja = ActiveWorkbook.ActiveSheet
Dim num As Integer
'Pedimos el número de copias
num = InputBox("¿Cuántas copias de la hoja quiere crear?", "Número de copias")
'Condición: num mayor o igual a 1. Si se cumple se crean las copias.
If num >= 1 Then
For x = 1 To num
hoja.Copy After:=hoja Next Else MsgBox "El número no es válido", vbOKOnly, "Error"
End If
End Sub
25/02/2022 a las 8:50 am
Workbooks(“Libro1”).Worksheets(1).Copy After:=Workbooks(“Libro2”).Sheets(2) , usando este codigo como podria copiar las hojas solo como valores ?
03/12/2023 a las 2:39 pm
Hola. Se puede copiar una hoja , renombrarla, y en la nueva, mantener los vínculos a las celdas , pero de la nueva creada!? Gracias