Home > Foro de Excel >

Debates de Excel

> Ayuda con Macro para copiar hojas de un archivo excel a otro archivo excel (back up)
Foro de Excel
Foro de Excel
4 Cursos online | 22493 Debates | 4682 Documentos | 21 Vídeos | 2 Test | 2 Blogs | 723 Imágenes | 39542 Miembros

Ayuda con Macro para copiar hojas de un archivo excel a otro archivo excel (back up)

ricardo
Ontario, Canadá
Escrito por Ricardo Gaviria el 13/12/2011

Necesito de su ayuda para crear una macro en excel 2003 que de un libro en excel existente me copie algunas hojas pre establecidas y luego abra otro libro ya previamente creado (en excel 2003) y las pegue alli sin reemplazar las anteriores cada vez que ejecute la macro (basicamente como exportar base de dato a otro libro excel o hacer backup a otro libro en excel) gracias

compartir


Robert Gunn
Ing. de sistemas unmsm
Escrito por Robert Gunn el 13/12/2011

Ricardo prueba con esto:

Sub copiarhojas()
Dim a
a = Format(Now, "dd-MM-yy hh.mm.ss")
Workbooks. Open Filename:="C:\... \nombredearchivodestino. Xlsx"
Workbooks("nombredearchivoorigen. Xlsm"). Sheets("Hoja1"). Copy _
After:=Workbooks("nombredearchivodestino. Xlsx"). Sheets(Sheets. Count)
ActiveSheet. Name = a
ActiveWorkbook. Save
ActiveWorkbook. Close False
End Sub

Esta macro copia la Hoja1 de un libro a otro pero considera lo siguiente:

- En "Filename" pon la ruta del archivo que quieres abrir
- Reemplaza "nombredearchivodestino" por el nombre del archivo que quieres abrir.
- Reemplaza "nombredearchivoorigen" por el nombre del archivo desde donde copias.
- Reemplaza "= a" por el nombre que quieres poner a la hoja creada en tu libro. Actualmente le asigna la fecha y la hora en que realizas el procedimiento.
- Ya sabes que no deben ir espacios ni mayusculas después de puntos, eso lo corrige el editor del foro.

Saludos

Ricardo Gaviria
Ontario, Canadá
Escrito por Ricardo Gaviria el 13/12/2011

Gracias por tu pronta respuesta, realice los cambios que me indicaste y efectivamente abre el archivo destino pero cuando va a copiar las hojas 3, 4 y 5 (ya cambie el nombre de la hoja a copiar tambien) me aparece el siguiente error

Se ha producido el error '9' en tiempo de ejecucion:

Subindice fuera del intervalo


Gracias


Ricardo Gaviria
Ontario, Canadá
Escrito por Ricardo Gaviria el 13/12/2011

Asi quedo la macro con los cambios que me recomendaste, la estoy ejecutando desde la hoja1 y amarrada a un boton


Sub copiarhojas()

Dim a

A = Format(Now, "dd-MM-yy hh.mm.ss")

Workbooks. Open Filename:="C:\Users\Usuario\Desktop\Custumer Service Report\STORE. Xlsx"

Workbooks("Customer Service Report. Xlsm"). Sheets("Hoja3"). Copy _

After:=Workbooks("STORE. Xlsx"). Sheets(Sheets. Count)

ActiveSheet. Name = a

ActiveWorkbook. Save

ActiveWorkbook. Close False

End Sub



Robert Gunn
Ing. de sistemas unmsm
Escrito por Robert Gunn el 13/12/2011

Mmmm... Normalmente ese error aparece cuando te equivocas a escribir una ruta.... Y presiento que tu estás poniendo mal la ruta de tu archivo... Observa que en una parte -en Filename- pusiste "CustUmer Service Report" (con "U") y más abajo en el nombre del archivo pusiste "CustOmer Service Report. Xlsm" (con "O")... ¿No estarás equivocándote ahi?.

Por otro lado, este código copia las hojas 3, 4 y 5 de tu archivo principal a tres otros libros distintos. Ya sabes que debes cambiar los datos. Te pongo el código que se repite 3 veces (1 para cada archivo).

El código se puede abreviar más pero lo dejo así porque 1. - No estoy seguro que comprendas mucho de VBA (ya que no lo indicas) y 2. - No sé cómo estás nombrando los libros.

Bueno, aqui está el código.


Sub copiarhoja()
Dim a, i
a = Format(Now, "dd-MM-yy hh.mm.ss")
' trabaja con el primer archivo
Workbooks. Open Filename:="C:\Users\Administrador\Downloads\BD1. Xlsx"
For i = 3 To 5
Workbooks("copiar hojas a otros libros. Xlsm"). Sheets(i). Copy _
After:=Workbooks("BD1. Xlsx"). Sheets(Sheets. Count)
ActiveSheet. Name = a & "_" & i
Next i
ActiveWorkbook. Save
ActiveWorkbook. Close False
' trabaja con el segundo archivo
Workbooks. Open Filename:="C:\Users\Administrador\Downloads\BD2. Xlsx"
For i = 3 To 5
Workbooks("copiar hojas a otros libros. Xlsm"). Sheets(i). Copy _
After:=Workbooks("BD2. Xlsx"). Sheets(Sheets. Count)
ActiveSheet. Name = a & "_" & i
Next i
ActiveWorkbook. Save
ActiveWorkbook. Close False
' trabaja con el tercer archivo
Workbooks. Open Filename:="C:\Users\Administrador\Downloads\BD3. Xlsx"
For i = 3 To 5
Workbooks("copiar hojas a otros libros. Xlsm"). Sheets(i). Copy _
After:=Workbooks("BD3. Xlsx"). Sheets(Sheets. Count)
ActiveSheet. Name = a & "_" & i
Next i
ActiveWorkbook. Save
ActiveWorkbook. Close False
End Sub

Si quieres puedes copiar a más libros aumenta un bloque con los datos requeridos.

Saludos



Ricardo Gaviria
Ontario, Canadá
Escrito por Ricardo Gaviria el 14/12/2011

Gracias por tu correccion con lo del nombre de la ruta, alli tenia un error.

Sin embargo el error continua por ello te cuento como esta estructurado todo.

Archivo Origen(Customer Service Report): en este puse la macro en la hoja1 llamada "Consolidation", en el mismo archivo deseo copiar la hoja3 "DB", hoja4 "Damage" y hoja5 "Received" a otro libro "STORE" renombrando o combinando el nombre original de cada hoja con (Now, "dd-MM-yy hh.mm.ss") de las hojas que estoy copiando hacia el libro "STORE".


Tanto el archivo origen "Customer Service Report" como el archivo destino "STORE" estan localizados dentro de una carpeta de nombre "Customer Service Report" en el escritorio del computador "C:\Users\Usuario\Desktop\Customer Service Report\STORE. Xlsx"


La macro que me diste originalmente esta abriendo el archivo destino desde el archivo origen pero no esta copiando las hojas al libro destino "STORE"



Ricardo Gaviria
Ontario, Canadá
Escrito por Ricardo Gaviria el 14/12/2011

Y si como tu mencionaste no se mucho de VBA pero practicando voy aprendiendo, es por ello que esta es la macro artesanal que realice (pero no se como simplificarla para no tener que correr dos macros diferentes "Sub copiarhojas()" y "Sub Macro5()"

Sub copiarhojas()


Workbooks. Open Filename:="C:\Users\Usuario\Desktop\Customer Service Report\STORE. Xlsx"

End Sub


Sub Macro5()

'

' Macro5 Macro

' Ricardo

'


' Sheets(Array("DB", "Damage", "Received")). Select

Sheets("Received"). Activate

Windows("Customer Service Report. Xlsm"). Activate

Sheets(Array("DB", "Damage", "Received")). Select

Sheets("Received"). Activate

Sheets(Array("DB", "Damage", "Received")). Copy After:=Workbooks("STORE. Xlsx")._

Sheets(1)


End Sub


Y esta funcionando para abrir el mismo archivo destino "STORE", pero obviamente no me cambia los nombres de los archivos, pero creo que si puedo incluir la siguente macro que me cambia el nombre de la hoja diariamente podria solucionar el tema de renombrar.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

If Target. Address = "$A$1" Then

Sh. Name = Target

End If

End Sub

Obviamente amarrando a la celda "$A$1" una formula de concatenar que me tome el nombre de la hoja (ejemplo "DB" y me la concatene con la formula "=AHORA()") y me genere la concatenacion en la celda la formula "$A$1" o algo asi, no se si me di a explicar.


Robert Gunn
Ing. de sistemas unmsm
Escrito por Robert Gunn el 14/12/2011

Ricardo, algunas ideas para que consigas tu objetivo:

1. - Procura alojar tu código en un MODULO, no en una hoja como lo indicas en tu penúltimo post.

2. - Tus dos códigos resumidos serían así:

Sub copiar()
Workbooks. Open Filename:="C:\Users\Usuario\Desktop\Customer Service Report\STORE. Xlsx"
Workbooks(" Customer Service Report . Xlsx"). Sheets(Array("DB", "Damage", "Received")). Copy After:=Workbooks("STORE. Xlsx"). Sheets(1)
End Sub

(pero te aconsejo que antes de usar arreglos primero domines bien secuencias y bucles...)

3. - Al copiar mediante Arrays deberás buscar y cambiar los nombres a los elementos del array -en tu caso: hojas- para que figuren en tu libro "STORE" (recuerda que el indice en un array empieza por "0"), de otro modo deberás hacer una búsqueda en cada hoja de este último libro para cambiarle el nombre por el que quieres.

4. - Recuerda que no puedes asignar ciertos caracteres al nombre de una hoja, como los dos puntos (:) o barras (/ ó \) y demás... Por lo que para jalar el valor de la celda "A1" -si es que ésta contiene la función "=AHORA()" -, deberás formatearla primero para que no tenga esos signos.


Robert Gunn
Ing. de sistemas unmsm
Escrito por Robert Gunn el 14/12/2011

Ahora bien, esto debería funcionar en tu caso:


Sub copiarhojas()
Dim a, i
a = Format(Now, "dd-MM-yy")
Workbooks. Open Filename:="C:\Users\Usuario\Desktop\Customer Service Report\STORE. Xlsx"
For i = 3 To 5
Workbooks("Customer Service Report. Xlsm"). Sheets(i). Copy _
After:=Workbooks("STORE. Xlsx"). Sheets(Sheets. Count)
ActiveSheet. Name = ActiveSheet. Name + a
Next i
ActiveWorkbook. Save
ActiveWorkbook. Close False
End Sub

Ten en cuenta que cada hoja de excel tiene un número de indice (1,2,3.. Etc) muy al margen del nombre que tu le pones a las hojas. Puedes ver el índice de las hojas que quieres copiar entrando al editor de Visual Basic y mirando el panel de proyecto. Ahi verás que el nombre que tu le das aparece entre paréntesis y su índice aparece en forma de "Hoja1", "Hoja2" etc. Debes verificar los números de índice de las hojas que quieres copiar. Por ejemplo: si ves que dice:
--- Hoja5 (DB) / Hoja6(Damage) / Hoja7(Received) ---
Entonces deberás cambiar la línea que dice: "For i=3 to 5" por "For i=5 to 7".

Si no funciona debes verificar que el nombre de tu archivo origen asi como su estenxión (xlsm) sean las correctas...


Ricardo Gaviria
Ontario, Canadá
Escrito por Ricardo Gaviria el 14/12/2011

Muchicimas gracias de nuevo, lo voy a intentar y te cuento luego, voy a ver como aprendo un poco mas pues es un tema interesante esto del VBA, y al final gracias por tu disposicion y paciencia.


Ricardo Gaviria
Ontario, Canadá
Escrito por Ricardo Gaviria el 15/12/2011

Wow, quedo super, de verdad eres un genio, muchicimas gracias por tu apoyo y dedicacion.


Ricardo Gaviria
Ontario, Canadá
Escrito por Ricardo Gaviria el 15/12/2011

Me surgio una pregunta, como podria ser la macro si en vez de copiar renombrando las hojas al otro libro (como lo hace ahora), las copiara del libro origen pero las reemplazara en el libro destino?


Armando Montes
Foro excel emagister
Escrito por Armando Montes el 23/12/2011

Bump


Ricardo Gaviria
Ontario, Canadá
Escrito por Ricardo Gaviria el 24/12/2011

Que significa Bump?



Armando Montes
Foro excel emagister
Escrito por Armando Montes el 24/12/2011

Siplemente "reactiva" el debate enviandolo a los primeros lugares.


Ricardo Gaviria
Ontario, Canadá
Escrito por Ricardo Gaviria el 28/12/2011

Me surgio una pregunta, como podria ser la macro si en vez de copiar renombrando las hojas al otro libro (como lo hace ahora), las copiara del libro origen pero las reemplazara en el libro destino?

Sub copiarhojas()
Dim a, i
a = Format(Now, "dd-MM-yy")
Workbooks. Open Filename:="C:\Users\Usuario\Desktop\Customer Service Report\STORE. Xlsx"
For i = 3 To 5
Workbooks("Customer Service Report. Xlsm"). Sheets(i). Copy _
After:=Workbooks("STORE. Xlsx"). Sheets(Sheets. Count)
ActiveSheet. Name = ActiveSheet. Name + a
Next i
ActiveWorkbook. Save
ActiveWorkbook. Close False
End Sub


Ricardo Gaviria
Ontario, Canadá
Escrito por Ricardo Gaviria el 17/06/2012

Gracias


 
Páginas internacionales: España  |  Italia  |  Francia  |  México  |  Alemania  |  Reino Unido  |  Argentina  |  Chile  |  Colombia  |  USA |  India |  Y próximamente: Brasil | 

Búsquedas frecuentes: papiloma pie lengua rajada osmotic silver trabajar en renfe instituciones que protegen al medio ambiente

EMAGISTER Servicios de formación, S.L. Copyright 1999/2013.