Como abrir dos libros copiar datos de uno a otro y guardar en otro libro





A pedido de un suscriptor de nuestro canal de You Tube, presentamos este ejemplo de macro que permite abrir dos archivos copiar datos del primero fichero al segundo y luego hacer una copia del segundo libro guardando como en el escritorio de Windows, anteriormente se presentaron ejemplos relacionados que quizás te interesen: macro hace una copia de la hoja activa y la guarda como; macro hace una copia de la hoja y la guarda como utilizando explorador de archivos de Windows, macro que permite copiar varias hojas y las guarda como, macro que copia varias hojas y las guarda como con el explorador de archivos de Windows.

Antes de seguir recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.


  

Desde el final podrás descargar el archivo comprimido que contiene el archivo con la macro y dos archivos que utiliza como origen y destino para copiar datos, recuerda copiar descomprimir los archivos y guardarlo en cualquier parte de la PC con la condición que estén los tres ficheros juntos en el directorio en el cual se guardaron.

Este ejemplo de macro abre un archivo que contiene datos que se desean pasar al archivo de destino, por ello la macro abre los dos archivos pasando datos desde el archivo de origen al de destino, luego cierra ambos libros sin guardar cambios, pero previamente hace una copia de la hoja del libro destino donde se copiaron los datos y este nuevo libro lo guarda en el escritorio con el nombre que previamente se definió en la macro.

El copiado de datos desde el origen al destino, no es un simple copie y pegue, copia datos, pero en filas que no son las mismas en el origen que en el destino, a su vez las columnas están intercambiadas es decir la columna C la copia en la columna F del destino y así sucesivamente con otras columnas.

En este ejemplo de macro que permite abrir dos libros copiar datos de uno a otro y luego guardar una copia en el escritorio de Windows con otro nombre, se muestra como crear una ruta de un archivo o fichero  con variables de la siguiente forma:

ruta = ActiveWorkbook.Path
myfile1 = ruta & "\334 REPORTE ORIGEN.xlsx"

Abrir un archivo de Excel con el siguiente código y guardar su nombre en una variable:

Workbooks.Open Filename:=myfile1, UpdateLinks:=0
FullName = Split(myfile1, Application.PathSeparator)
WBO = FullName(UBound(FullName))

Como determinar la última fila con datos cuando en la estructura del archivo hay datos que no interesan copiar y obstaculizan encontrar la última fila con datos:

uf = Workbooks(WBO).Sheets(b1).Range("A" & Rows.Count).End(xlUp).End(xlUp).End(xlUp).End(xlUp).End(xlUp).Row - 1

Como copiar mediante bucle hasta la última fila con datos, información de un libro a otro no siendo consecutivos, es decir los datos de las columnas del libro origen copiarlos en columnas distintas del libro destino, de la siguiente forma

For x = 8 To uf
Workbooks(WBO).Sheets(b1).Cells(x, "A").Copy Destination:=Workbooks(WBD).Sheets(b2).Cells(j, "A")
Next x


Como cerrar un libro sin guardar cambios y guardando cambios.

Workbooks(WBD).Close False
ActiveWorkbook.Close True

El vídeo que sigue muestra una explicación más detallada y gráfica de la macro presentada, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como  por ejemplo Como crear una factura o sale invoice y grabar guardar PDF XLS y enviar por mailbuscar en listbox mientras escribes en textboxordenar hojas libro excel por su nombreconectar Excel con Access y muchos ejemplos más.









Código que se inserta en un módulo




Sub openbook()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
Dim myfile1, myfile2, myfile3, mydesk, WBO, WBD, b1, b2

ruta = ActiveWorkbook.Path
myfile1 = ruta & "\334 REPORTE ORIGEN.xlsx"
myfile2 = ruta & "\334 REPORTE DESTINO.xlsx"
mydesk = CreateObject("wscript.shell").specialfolders("desktop")
myfile3 = mydesk & "\334 REPORTE COPIA.xlsx"

Workbooks.Open Filename:=myfile1, UpdateLinks:=0
FullName = Split(myfile1, Application.PathSeparator)
WBO = FullName(UBound(FullName))
b1 = ActiveSheet.Name

Workbooks.Open Filename:=myfile2, UpdateLinks:=0
FullName = Split(myfile2, Application.PathSeparator)
WBD = FullName(UBound(FullName))
b2 = ActiveSheet.Name

Workbooks(WBO).Activate
uf = Workbooks(WBO).Sheets(b1).Range("A" & Rows.Count).End(xlUp).End(xlUp).End(xlUp).End(xlUp).End(xlUp).Row - 1
j = 6
For x = 8 To uf
Workbooks(WBO).Sheets(b1).Cells(x, "A").Copy Destination:=Workbooks(WBD).Sheets(b2).Cells(j, "A")
Workbooks(WBO).Sheets(b1).Cells(x, "C").Copy Destination:=Workbooks(WBD).Sheets(b2).Cells(j, "D")
Workbooks(WBO).Sheets(b1).Cells(x, "F").Copy Destination:=Workbooks(WBD).Sheets(b2).Cells(j, "C")
Workbooks(WBO).Sheets(b1).Cells(x, "H").Copy Destination:=Workbooks(WBD).Sheets(b2).Cells(j, "F")
j = j + 1
Next x
Workbooks(WBO).Close False

Workbooks(WBD).Activate
ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:=myfile3, FileFormat:=xlOpenXMLWorkbook
ActiveWorkbook.Close True
Workbooks(WBD).Close False

MsgBox ("El archivo se guardó con éxito en " & myfile3), vbInformation, "AVISO"
Application.CutCopyMode = False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub



Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends