Jump to content

Guardar copia de hojas en distinto archivo


Recommended Posts

Buenas tardes a todos!

He estado curioseando por el foro y por internet largo y tendido y no he sabido encontrar una solucion a lo que estoy buscando. O por lo menos no la he sabido aplicar bien. De estos dos temas he logrado extraer lo poco que he hecho, pero que está mal resuelto por mi parte, y no se como seguir:

https://www.ayudaexcel.com/foro/macros-programacion-vba-10/solucionado-boton-que-actue-igual-que-guardar-como-22639/[/HTML]

[HTML]https://www.ayudaexcel.com/foro/macros-programacion-vba-10/pendiente-guardar-sola-hoja-libro-22283/[/HTML]

Lo que estoy intentando conseguir es lo siguiente:

- Tengo un libro protegido contra escritura con multitud de hojas, todas ocultas menos una, la principal. Dispone de muchos botones.

- Cada uno de esos botones copia (o por lo menos eso quiero conseguir) un grupo de 2-3 hojas de las que estan ocultas y las traslada a un archivo completamente nuevo, en el que sólo existen esas hojas, que tendran la mayoría de las celdas protegidas, pero que habrá otras tantas sin proteger y es ahí donde se podrá escribir y editar.

- Estas hojas a copiar tienen macros escritas en las propias hojas, para que se "trasladen" con ellas cuando se copien. Por ello el archivo nuevo creado siempre tiene que tener extension ".xlsm" (es que no se como conseguir esto)

- La ruta y el nombre de archivo lo elegira el usuario al presionar el boton, con un cuadro del tipo "guardar como" tipico del windows.

(creo que lo he puesto todo, espero que no se me haya olvidado nada que pudiera influir...)

He escrito algo de la macro, pero lo que me ocurre es que me crea el archivo que quiero y donde quiero, pero luego me da error al abrirlo, me dice que esta dañado. Al mismo tiempo me crea un archivo abierto con lo que quiero, pero sin nombre y sin guardar en la ruta que le he indicado previamente.... vamos, que me hace un mix.

He probado con SaveCopyAs, pero no me deja especificar el tipo de extension, y con SaveAs pero no me deja copiar solo las hojas que quiero... Lo que adjunto es al final el batiburrillo de haber estado toqueteando con prueba y error el codigo, pero que nanai...

Muchas gracias de antemano.

Un saludo

guardar copia hojas.rar

Link to comment
Share on other sites

Mañana me lo miro a fondo, de momento he encontrado esto por ahí:

Sub GuardarSaveCopyAs()

'Case "xls": FileFormatValue = 56
'Case "xlsx": FileFormatValue = 51
'Case "xlsm": FileFormatValue = 52
'Case "xlsb": FileFormatValue = 50


ActiveWorkbook.SaveCopyAs Filename:="C:\MiLibro.xlsm", FileFormat:=52


End Sub


[/CODE]

Un saludo

Link to comment
Share on other sites

Muchas gracias, pero es que en la ayuda del VBA da a entender que SaveCopyAs solo admite filename, sin ninguna opcion mas, por eso estoy tan perdida ahora...

he sustituido lo que tenia de fileformat por el numero 52, como pone en tu listado, y me sigue dando error, no me reconoce esa orden...

Gracias por mirarlo.

Un saludo.

Link to comment
Share on other sites

Hola, yo tengo un archivo que edito y esa edicion la guarda en uno nuevo para poder editar depsuesm este el codigo ke puse, kiza te pueda ayudar

'filename, puede ser un nombre que ya tengas para esto, yo tengo ke se gaurde por fecha + nombre para que lo pueda encontrar d

despúes, tu puedes poner un distiuntivo,

ActiveWindow.SmallScroll Down:=27

Range(Selection, Selection.End(xlUp)).Select

Range("A1:H49").Select

Selection.Copy

Workbooks.Add

ActiveSheet.PasteFilename = fecha & Cliente

ActiveWorkbook.SaveAs Filename:= _

"C:\Users\\mis Documentos\" & fecha & Cliente & ".xlsm", FileFormat:= _

xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

'notese que tiene una extension .xlsm para guardarlo con macros

DisplayAlerts = False

ActiveWindow.Close

DisplayAlerts = False

kiza te pueda ayudar!

Link to comment
Share on other sites

Hola sieigfred!

Muchas gracias por la ayuda. También pensé en una solución como la tuya, es decir, copiar las hojas, crear un nuevo archivo y después pegarlas para luego poder usar la orden SaveAs, especificando el formato de archivo (su extensión), pero me quedé bloqueada en el paso de pegar las hojas copiadas en el archivo nuevo... no sé cómo se hace!! Y en la ayuda del VBA no lo encontré. Cuando lo hago con la grabadora de macros tampoco me incluye ninguna línea donde quede especificada esa orden...

Sabes cómo conseguir copiar y pegar una hoja entera (no un rango de celdas, sino lo que es la hoja en sí, para que se copien también las macros) en un archivo nuevo?? estoy bloqueada...

Cualquier camino a la misma solución me serviría.

Muchas gracias por todo.

Un saludo

Link to comment
Share on other sites

Hola:

FileFormat funciona para SaveAs pero no para SaveCopyAs, cosas de Microsoft.

Esta es otra manera de generar un archivo a partir de otro:



Set Archivos = CreateObject("Scripting.FileSystemObject")
Archivos.CopyFile "C:\Archivo a copiar.xlsm", "C:\Archivo nuevo.xlsm"


[/CODE]

Espero que te sirva.

Saludos

Nota: Cuando copias una hoja sobre otra del mismo libro o de otro, no se copian las macros.

Link to comment
Share on other sites

Hola Macro Antonio.

Lo siento, pero no he sabido aplicar bien lo que me indicas. Creo que estas copiando el archivo entero de un directorio con una ruta predefinida a otro con ruta tambien predefinida. es asi??

solo quiero copiar determinadas hojas que especifique en un archivo nuevo, pero la ruta que la pueda especificar el usuario cada vez, por eso esaba lo de "Application.GetSaveAsFilename".

por eso usaba lo de SaveCopyAs, pero no me deja especificar la extension, por eso no funcionaba...

y creando un archivo nuevo (Workbook.Add) y luego copiando y pegando las hojas? es lo de pegar las hojas lo que no encuentro por ninguna parte como hacer...

Lo que no quiero es copiar y pegar rangos de celdas, sino la hoja en si, de un archivo a otro, como la opcion del menu del boton derecho del raton sobre una hoja en excel, "Mover o Copiar...". Lo he probado manualmente, y los códigos escritos en la propia hoja si se trasladan también. Obviamente lo escrito en los módulos no, pero ahí no tengo nada escrito. Si hago esto de forma automática, ¿no se trasladarán entonces?

me da la impresion de que esto va a tener una solucion mas simple, pero no la veo...

Un saludo

Link to comment
Share on other sites

Hola.

Creo que acabo de encontrar, por pura casualidad, la solucion, en la ayuda de VBA, mas especificamente en el apartado de "Sheets.Copy", donde aparece el siguiente comentario:

"Si no se especifica Before o After, Microsoft Excel crea un nuevo libro que contiene la hoja copiada."

No me hace falta especificar que quiero crear un nuevo archivo, ni pegarlo ni nada, ya lo hace el propio "Copy" en si mismo si no se especifica "before" o "after"!!

He dejado el codigo asi, y salvo problemas futuros que ahora no pueda detectar, por ahora me funciona!

Sub GuardarComoHoja()

Application.ScreenUpdating = False

RutaArchivo = Application.GetSaveAsFilename(InitialFileName:="Proyecto", _
fileFilter:="Archivos Excel habilitado para macros (*.xlsm), *.xlsm")

Sheets(Array("Hoja2", "Hoja3", "Hoja4")).Copy

ActiveWorkbook.SaveAs Filename:=RutaArchivo, FileFormat:=xlOpenXMLWorkbookMacroEnabled
ActiveWorkbook.Close SaveChanges:=False
ThisWorkbook.Activate


End Sub [/CODE]

Asi que doy el tema por solucionado

Muchas gracias por todo.

Un saludo

[sOLUCIONADO]

Link to comment
Share on other sites

las macros contenidas en los modulos, no, ninguna se traslada.

los procedimientos o codigos escritos en las propias hojas si se me copian, acabo de hacer mas pruebas y parece de primeras que si se trasladan.

por eso he estado escribiendo los codigos hasta ahora tan solo en las hojas, nunca en modulos o en thisworkbook, previniendo esta situacion.

pero aun teniendo esta precaución, significa esto que despues tendra un malfuncionamiento el archivo nuevo creado???

Link to comment
Share on other sites

Me he equivocado al asegurar que el código VBA no se traspasa al copiar la hoja en otro libro, todo lo contrario, las hojas copiadas en el nuevo contendrán el código VBA.

Sin embargo, solo contendrá el código VBA de la hojas copiadas, no sucede lo mismo con ThisWorkbook, Módulos y Formularios, que no se copiarán, salvo que hagas una copia del libro en su totalidad con otro nombre.

Link to comment
Share on other sites

Gracias por confirmar! la verdad es que me habia preocupado, porque todo lo que he hecho en un largo tiempo ha sido pensando que luego sí que podría copiar hojas con su codigo...

Muchas gracias por todo :joyous:

Un saludo

(Bueno, ahora si está SOLUCIONADO)

Link to comment
Share on other sites

jajajajaja!!

a mi es que me sonaba haberlo hecho con anterioridad, pero me has hecho dudar muy muy seriamente.... cualquiera pone en duda lo que dices sobre VBA!!!!

quien me lo iba a decir, una piltrafilla como yo ha logrado enseñarte algo de excel, aunque haya sido por accidente!!!

que emoción!! :sorrow:

Un saludo!!

(y gracias por todo de nuevo)

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

Privacy Policy