Hace algunas semanas hablé sobre cómo crear una macro para copiar datos de una hoja a otra y de inmediato recibí preguntas sobre cómo modificar dicho código para hacer la misma copia de datos pero a un libro diferente de Excel. Para lograr este nuevo objetivo haremos uso del método Open de la colección de objetos Workbooks.
La colección Workbooks en VBA
Si tienes experiencia en la programación en Excel seguramente conocerás el modelo de objetos y su jerarquía, donde uno de los objetos ampliamente utilizado es el objeto Workbook el cual representa un libro de Excel. Ya que al utilizar Excel podemos trabajar con múltiples libros a la vez, fue necesario crear un objeto adicional que nos ayudara a agrupar y manejar todos esos libros y así es como surge la colección Workbooks.
Ya que la colección Workbooks es a su vez un objeto en Excel, tendrá sus propios métodos y propiedades y en esta ocasión centraremos nuestra atención en su método Open.
El método Open del objeto Workbooks
El método Open de la colección Workbooks tiene 15 argumentos, así que dejaremos la revisión detallada de cada uno de ellos para otra ocasión. El único argumento que nos interesa por ahora es la ruta del archivo que deseamos abrir la cual es proporcionada al método Open como una cadena de texto de la siguiente manera:
Set wbDestino = Workbooks.Open("C:\LibroDestino.xlsx")
Es importante que la ruta del archivo indicado sea la correcta o de lo contrario obtendremos un mensaje de error. Pero si todo funciona correctamente, obtendremos un nuevo objeto Workbook que hará referencia al archivo indicado y podremos hacer referencia a cualquier hoja y celda de dicho libro para copiar los datos deseados.
Macro para copiar datos a otro libro en Excel
Ahora que ya sabes cómo abrir un libro de Excel utilizando VBA, podemos escribir el código de nuestra macro para copiar datos a otro libro. Recuerda que he tomado como base el código previamente publicado en el artículo Macro para copiar datos de una hoja a otra en Excel.
Sub CopiarCeldas() 'Definir objetos a utilizar Dim wbDestino As Workbook, _ wsOrigen As Excel.Worksheet, _ wsDestino As Excel.Worksheet, _ rngOrigen As Excel.Range, _ rngDestino As Excel.Range 'Indicar el libro de Excel destino Set wbDestino = Workbooks.Open(ActiveWorkbook.Path & "LibroDestino.xlsx") 'Activar este libro ThisWorkbook.Activate 'Indicar las hojas de origen y destino Set wsOrigen = Worksheets("Origen") Set wsDestino = wbDestino.Worksheets("HojaDestino") 'Indicar la celda de origen y destino Const celdaOrigen = "A1" Const celdaDestino = "A1" 'Inicializar los rangos de origen y destino Set rngOrigen = wsOrigen.Range(celdaOrigen) Set rngDestino = wsDestino.Range(celdaDestino) 'Seleccionar rango de celdas origen rngOrigen.Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy 'Pegar datos en celda destino rngDestino.PasteSpecial xlPasteValues Application.CutCopyMode = False 'Guardar y cerrar el libro de Excel destino wbDestino.Save wbDestino.Close End Sub
Las diferencias entre esta nueva macro y la publicada en el artículo original son las siguientes:
- Línea 4: Definí la variable wbDestino como un objeto del tipo Workbook que nos servirá para guardar la referencia al libro destino.
- Línea 11: El método Workbooks.Open se encarga de abrir el libro a donde se copiarán los datos y la referencia se guardará en la variable wbDestino.
- Línea 14: El libro abierto se convierte en el libro activo así que, para que las referencias del resto del código funcionen tal como en la versión original, activo de nueva cuente al libro donde se encuentra el código con la instrucción ThisWorkbook.Activate.
- Línea 18: Utilizo el objeto wbDestino para hacer referencia a la hoja de dicho libro a donde se copiarán los datos.
- Línea 39 y 40: Los métodos Save y Close me permiten guardar los cambios en el libro destino y finalmente cerrarlo.
Es importante que la ruta al libro destino sea correcta o de lo contrario recibirás un mensaje de error. De la misma manera, la hoja de destino indicada debe existir en dicho libro o también recibirás un mensaje de error.
Copiar datos a otro libro con la macro
El archivo de descarga que preparé para este artículo es un archivo comprimido donde encontrarás el archivo LibroOrigen.xlsm que contiene el código de la macro. También he incluido dentro del comprimido el archivo LibroDestino.xlsx que es necesario para que el código funcione correctamente. Para probar la macro solo deberás abrir el archivo LibroOrigen.xlsm y pulsar el botón Copiar.
Recuerda que se pegarán los valores sin formato, debido al argumento xlPasteValues del método PasteSpecial (Línea 35), pero si deseas incluir el formato al copiar los datos solo debes reemplazar dicho argumento por xlPasteAll.
Solo resta que descargues los archivos de trabajo y ejecutes la macro para copiar datos a otro libro de Excel. Si deseas probar con tus propios libros deberás copiar el código VBA y hacer dos cambios importantes: Indicar correctamente la ruta del archivo destino (Línea 11) y el nombre de la hoja a donde se copiarán los datos (Línea 18).
Artículos relacionados
Macro para copiar datos de una hoja a otra en Excel