.
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.
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:
Abrir un archivo de Excel con el siguiente código y guardar su nombre en una variable:
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
Como cerrar un libro sin guardar cambios y guardando cambios.
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 mail, buscar en listbox mientras escribes en textbox, ordenar hojas libro excel por su nombre, conectar Excel con Access y muchos ejemplos más.
if (payload.eventType == ‘subscribe’) {
// Add code to handle subscribe event.
} else if (payload.eventType == ‘unsubscribe’) {
// Add code to handle unsubscribe event.
}
if (window.console) { // for debugging only
window.console.log(‘YT event: ‘, payload);
}
}
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, b2ruta = 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
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
.
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