Macro: copiar hoja de otros libros.

Hola, estoy trabajando en un libro que reúna información de otros libros.
Todos los días creo un libro con un nombre en el formato "aaaa mm dd.xls" dentro hay una hoja llamada "resumen"
Cada cierto periodo de tiempo junto todas las hojas "resumen" en un libro renombrando cada una con la fecha del libro, resultando bastante tedioso.
Quiero crear una macro que copie estas hojas y las renombre. La macro tomaría el periodo de tiempo desde una hoja ya creada en el libro.
Lo único que me falta es saber como hacerlo, ya que desconozco como.
Espero que me puedas ayudar, gracias por tu tiempo.
Saludos, Carlos
PD: ya probé hacerlo sin macros, con la funciones dirección() e indirecto() y otras, que según un periodo entre dos fechas calcula las posibles fechas y referencia las celdas con cada libro, son más o menos 30 libros. Pero da error  #¡REF! Por que los libros están cerrados, los cuales debo abrir 30 libros es un caos.

1 respuesta

Respuesta
1
A ver si esto te ayuda.
Resérvate un casilla para poner la fecha que quieras modificar. En el código que te paso, en tu libro principal la celda B3 debería contener algo como 2009 04 28. Asegúrate de tener un libro con ese nombre, que dentro tenga una hoja llamada resumen. Para probar el funcionamiento, me he creado un botón que hacía lo que necesitabas (creo), con un libro. Aquí te dejo el código que he utilizado, espero que te sirva.
Private Sub CommandButton1_Click()
' Tomamos el nombre de la hoja de la casilla que hayas reservado
nombre_hoja = Range("b3")
' Creamos una nueva hoja, y la llamamos con ese mismo nombre
Sheets.Add
ActiveSheet.Name = nombre_hoja
' Abrimos el fichero del que quieres obtener la hoja resumen
Workbooks.Open FileName:="C:\RUTA DONDE SE ENCUENTRE EL ARCHIVO\" & nombre_hoja & ".xls"
' Una vez abierto el fichero, volvemos al libro principal
Windows("Resumen.xls").Activate
' Lo último que hicimos fue crear la hoja, así que ya estamos en el lugar indicado
' Ahora se escribe en la celda A1, la referencia al libro que abrimos antes, y copiamos
' las celdas necesarias. Yo he puesto un rango a ojo, modifica el p50, y copiarás tantos
' datos como quieras.
ActiveSheet.Range("a1") = "='[" & nombre_hoja & ".xls]Resumen'!A1"
ActiveSheet.Range("a1").Copy
ActiveSheet.Range("a1:p50").Select
ActiveSheet.Paste
' Después de copiar, se cierra el libro en cuestión y hemos terminado
Workbooks(nombre_hoja & ".xls").Close
ActiveSheet.Range("a1").Select
Application.CutCopyMode = False
End Sub
Esto admite infinidad de variantes. Por ejemplo, si quieres que te haga automáticamente muchas hojas seguidas, si los días son seguidos (28 de abril, 29 de abril, 30 de abril, 1 de mayo...) se puede programar, aunque sería algo costoso (meses con distintos días...). Si no es así, no sabría como hacerlo.
En cuanto a la ruta del archivo, si cada vez es distinta, te recomiendo que te reserves otra celda en tu libro principal, y escribas ahí la ruta. Te creas otra variable definida (por ejemplo) como ruta = range("b4"), suponiendo que en la celda B4 has puesto esa ruta.
No sé si es exactamente lo que buscabas, pero si entendí bien tu pregunta, con esto ya ganarás algo de tiempo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas