Copiar hojas con VBA

El objeto Workbook en VBA contiene una colección llamada Worksheets que representa todas las hojas de un libro. Esta colección hace uso del método Copy para realizar la copia de una hoja.

Copiar en el mismo libro

Para realizar una copia dentro del mismo libro de Excel se puede utilizar la siguiente instrucción:

Worksheets("Origen").Copy After:=Worksheets("Final")

La sentencia copiará la hoja llamada Origen y la colocará justo después de la hoja llamada Final.  El parámetro After es el encargado de indicar que la copia se colocará después de la hoja Final. Si quisiéramos colocar la copia antes de la hoja Final utilizaríamos el parámetro Before de la siguiente manera:

Worksheets("Origen").Copy Before:=Worksheets("Final")

Si queremos colocar la copia hasta el final de todas las hojas podemos hacer uso de la propiedad Sheets.Count que nos ayuda a saber el número total de hojas de un libro.

Worksheets("Origen").Copy After:=Sheets(Sheets.Count)

En estos ejemplos he utilizado el nombre de las hojas, pero también es posible utilizar su posición dentro de la colección Worksheets. Por ejemplo, si la hoja llamada “Origen” es la segunda hoja dentro del libro puedo colocar la instrucción de la siguiente manera:

Worksheets(2).Copy After:=Sheets(Sheets.Count)

De esta manera se realizará siempre la copia de la segunda hoja del libro sin importar su nombre.

Copiar a un libro diferente

Si deseas hacer la copia de una hoja hacia un libro diferente la instrucción cambia un poco ya que se debe especificar tanto el libro origen como el libro destino. En este ejemplo haré la copia de la primera hoja del Libro1 y la colocaré en el Libro2 después de la tercera hoja.

Workbooks("Libro1.xlsx").Worksheets(1).Copy After:=Workbooks("Libro2.xlsx").Sheets(3)

Es importante que ambos libros estén abiertos para que se pueda realizar la copia adecuadamente.

Artículos relacionados
Programando en VBA
Mostrar la ficha Programador