MACRO de grabacion

15/11/2006 - 20:38 por Cesar Yanapa Z. | Informe spam
Estimados,
Tengo una hoja excel de casi 9 megas, tiene formúlas, extrae datos de muchos
otros files,etc.
Bien, toda la información compilada en este file necesito envíarsela a los
gerentes de territorio, pero como comprenderán es demasiado extenso.
Es posible crear una macro para que desde este file se cree una copia del
file sólo valores, sin ningun link o fórmula.

Gracias anticipadas por su ayuda.

Cesar Yanapa Z.

Preguntas similare

Leer las respuestas

#6 David
16/11/2006 - 15:10 | Informe spam
Disculpa por no haberte leído bien.

Efectivamente, cuando cambias := por =, estás modificando la instrucción que
pega como valores las fórmulas de tu libro. Pienso que esto fue necesario
porque al copiar el código, la instrucción (que es una sola y bastante
larga), se dividió en varias líneas. Te lo mando nuevamente, esta vez
escrito con líneas menos largas. Espero que funcione como lo esperas.

Sub Convertir()
Dim Celda As String

'Se guarda copia del libro activo
'y se detiene la actualización de la pantalla
ActiveWorkbook.SaveAs _
Filename:="Copia de " & ActiveWorkbook.Name
Application.ScreenUpdating = False

' ... para cada hoja del libro,
For Each Hoja In ActiveWorkbook.Sheets
Hoja.Activate

'Se determina la celda activa,
Celda = ActiveCell.Address

'Se selecciona toda la hoja y se copia,
Range("A1:IV65536").Select
Selection.Copy

'pegando luego como valores,
'**** (Aquí fue donde ocurrió el error) ****
Selection.PasteSpecial _
Paste:=xlPasteValues, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
Application.CutCopyMode = False

'y se vuelve a la celda activa.
Range(Celda).Select
Next Hoja

'Por último, se vuelve a activar la actualización
'de pantalla y se graba el archivo modificado
Application.ScreenUpdating = True
ActiveWorkbook.Save
End Sub

Comentas si el resultado es el esperado.

Saludos.



"Cesar Yanapa Z." escribió:

Hola David,
El parametro de datos va desde A11:M4500, son casi 18 hojas, cada una jala
datos de distintos files externos y dentro de las mismas se buscan entre si
para compartir datos.
Ya he verificado que todo el espacio en blanco disponible no tenga
absolutamente nada para que no me genere espacio.
Creo que es código, mira por ejemplo a mi me salia error cuando encontraba
":=" y lo cambie por "=" y acepto que grabará la macro por eso lo cpoie para
que lo compares con el que me enviaste.

Gracias anticipadas por tu ayuda.


"David" escribió:

> Algo más: ¿Tienes celdas combinadas?
>
>
>
> "David" escribió:
>
> > Entonces es probable que el "peso" de tu archivo no se deba a los vínculos o
> > a las fórmulas, sino a otra causa.
> >
> > ¿Tienes muchos formatos aplicados? ¿Qué tal si en la copia trasladamos
> > solamente los textos?
> >
> > ¿Si en cada hoja haces clic en Control+Fin, a dónde llegas? Si eso te sitúa
> > cerca del fina de tus datos, no habría problema, pero si te lleva muy abajo o
> > a la derecha de los mismos, podría ser que las celdas vacías también te
> > generen espacio de archivo.
> >
> > Comentas para estas dos preguntas, y veremos qué hacer.
> >
> >
> > "Cesar Yanapa Z." escribió:
> >
> > > Estimado David,
> > > Debo ser sincero y decirte que de codigo casi nada se, siempre grabo mis
> > > macros de la manera rustica.
> > > Pero bien, he copiado el codigo que me envias y efectivamente me hace una
> > > copia del archivo, pero es una copia identica, el archivo sigue siendo pesado
> > > (9Mb) y contiene todas las referencias de las celdas.
> > > Espero no haber copiado mal, te adjunto el codigo que he copiado:
> > > Sub Convertir()
> > > Dim Celda As String
> > >
> > > 'Se guarda copia del libro activo y se detiene la actualización de la
> > > pantalla
> > > ActiveWorkbook.SaveAs Filename:="Copia de " & ActiveWorkbook.Name
> > > Application.ScreenUpdating = False
> > >
> > > ' ... para cada hoja del libro,
> > > For Each Hoja In ActiveWorkbook.Sheets
> > > Hoja.Activate
> > >
> > > 'Se determina la celda activa,
> > > Celda = ActiveCell.Address
> > >
> > > 'Se selecciona toda la hoja y se copia,
> > > Range("A1:IV65536").Select
> > > Selection.Copy
> > >
> > > 'pegando luego como valores,
> > > Selection.PasteSpecial
> > > Paste = xlPasteValues
> > > Operation = xlNone
> > > SkipBlanks = False
> > > Transpose = False
> > > Application.CutCopyMode = False
> > >
> > > 'y se vuelve a la celda activa.
> > > Range(Celda).Select
> > > Next Hoja
> > >
> > > 'Por último, se vuelve a activar la actualización de pantalla.
> > > Application.ScreenUpdating = True
> > > End Sub
> > > Lo he copiado tal cual.
> > >
> > > Gracias anticipadas por tu ayuda.
> > >
> > >
> > >
> > > "David" escribió:
> > >
> > > > Podrías partir del siguiente código:
> > > >
> > > > Sub Convertir()
> > > > Dim Celda As String
> > > >
> > > > 'Se guarda copia del libro activo y se detiene la actualización de la
> > > > pantalla
> > > > ActiveWorkbook.SaveAs Filename:="Copia de " & ActiveWorkbook.Name
> > > > Application.ScreenUpdating = False
> > > >
> > > > ' ... para cada hoja del libro,
> > > > For Each Hoja In ActiveWorkbook.Sheets
> > > > Hoja.Activate
> > > >
> > > > 'Se determina la celda activa,
> > > > Celda = ActiveCell.Address
> > > >
> > > > 'Se selecciona toda la hoja y se copia,
> > > > Range("A1:IV65536").Select
> > > > Selection.Copy
> > > >
> > > > 'pegando luego como valores,
> > > > Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
> > > > SkipBlanks _
> > > > :=False, Transpose:=False
> > > > Application.CutCopyMode = False
> > > >
> > > > 'y se vuelve a la celda activa.
> > > > Range(Celda).Select
> > > > Next Hoja
> > > >
> > > > 'Por último, se vuelve a activar la actualización de pantalla.
> > > > Application.ScreenUpdating = True
> > > > End Sub
> > > >
> > > > y personalizarlo según lo necesites...
> > > >
> > > >
> > > >
> > > > "Cesar Yanapa Z." escribió:
> > > >
> > > > > Estimados,
> > > > > Tengo una hoja excel de casi 9 megas, tiene formúlas, extrae datos de muchos
> > > > > otros files,etc.
> > > > > Bien, toda la información compilada en este file necesito envíarsela a los
> > > > > gerentes de territorio, pero como comprenderán es demasiado extenso.
> > > > > Es posible crear una macro para que desde este file se cree una copia del
> > > > > file sólo valores, sin ningun link o fórmula.
> > > > >
> > > > > Gracias anticipadas por su ayuda.
> > > > >
> > > > > Cesar Yanapa Z.
Respuesta Responder a este mensaje
#7 Cesar Yanapa Z.
16/11/2006 - 22:34 | Informe spam
Estimado David,
Tu ayuda a sido efectiva y oportuna.
mil gracias por el tiempo, el código esta corriendo perfectamente.
Saludos cordiales,

"David" escribió:

Disculpa por no haberte leído bien.

Efectivamente, cuando cambias := por =, estás modificando la instrucción que
pega como valores las fórmulas de tu libro. Pienso que esto fue necesario
porque al copiar el código, la instrucción (que es una sola y bastante
larga), se dividió en varias líneas. Te lo mando nuevamente, esta vez
escrito con líneas menos largas. Espero que funcione como lo esperas.

Sub Convertir()
Dim Celda As String

'Se guarda copia del libro activo
'y se detiene la actualización de la pantalla
ActiveWorkbook.SaveAs _
Filename:="Copia de " & ActiveWorkbook.Name
Application.ScreenUpdating = False

' ... para cada hoja del libro,
For Each Hoja In ActiveWorkbook.Sheets
Hoja.Activate

'Se determina la celda activa,
Celda = ActiveCell.Address

'Se selecciona toda la hoja y se copia,
Range("A1:IV65536").Select
Selection.Copy

'pegando luego como valores,
'**** (Aquí fue donde ocurrió el error) ****
Selection.PasteSpecial _
Paste:=xlPasteValues, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
Application.CutCopyMode = False

'y se vuelve a la celda activa.
Range(Celda).Select
Next Hoja

'Por último, se vuelve a activar la actualización
'de pantalla y se graba el archivo modificado
Application.ScreenUpdating = True
ActiveWorkbook.Save
End Sub

Comentas si el resultado es el esperado.

Saludos.



"Cesar Yanapa Z." escribió:

> Hola David,
> El parametro de datos va desde A11:M4500, son casi 18 hojas, cada una jala
> datos de distintos files externos y dentro de las mismas se buscan entre si
> para compartir datos.
> Ya he verificado que todo el espacio en blanco disponible no tenga
> absolutamente nada para que no me genere espacio.
> Creo que es código, mira por ejemplo a mi me salia error cuando encontraba
> ":=" y lo cambie por "=" y acepto que grabará la macro por eso lo cpoie para
> que lo compares con el que me enviaste.
>
> Gracias anticipadas por tu ayuda.
>
>
> "David" escribió:
>
> > Algo más: ¿Tienes celdas combinadas?
> >
> >
> >
> > "David" escribió:
> >
> > > Entonces es probable que el "peso" de tu archivo no se deba a los vínculos o
> > > a las fórmulas, sino a otra causa.
> > >
> > > ¿Tienes muchos formatos aplicados? ¿Qué tal si en la copia trasladamos
> > > solamente los textos?
> > >
> > > ¿Si en cada hoja haces clic en Control+Fin, a dónde llegas? Si eso te sitúa
> > > cerca del fina de tus datos, no habría problema, pero si te lleva muy abajo o
> > > a la derecha de los mismos, podría ser que las celdas vacías también te
> > > generen espacio de archivo.
> > >
> > > Comentas para estas dos preguntas, y veremos qué hacer.
> > >
> > >
> > > "Cesar Yanapa Z." escribió:
> > >
> > > > Estimado David,
> > > > Debo ser sincero y decirte que de codigo casi nada se, siempre grabo mis
> > > > macros de la manera rustica.
> > > > Pero bien, he copiado el codigo que me envias y efectivamente me hace una
> > > > copia del archivo, pero es una copia identica, el archivo sigue siendo pesado
> > > > (9Mb) y contiene todas las referencias de las celdas.
> > > > Espero no haber copiado mal, te adjunto el codigo que he copiado:
> > > > Sub Convertir()
> > > > Dim Celda As String
> > > >
> > > > 'Se guarda copia del libro activo y se detiene la actualización de la
> > > > pantalla
> > > > ActiveWorkbook.SaveAs Filename:="Copia de " & ActiveWorkbook.Name
> > > > Application.ScreenUpdating = False
> > > >
> > > > ' ... para cada hoja del libro,
> > > > For Each Hoja In ActiveWorkbook.Sheets
> > > > Hoja.Activate
> > > >
> > > > 'Se determina la celda activa,
> > > > Celda = ActiveCell.Address
> > > >
> > > > 'Se selecciona toda la hoja y se copia,
> > > > Range("A1:IV65536").Select
> > > > Selection.Copy
> > > >
> > > > 'pegando luego como valores,
> > > > Selection.PasteSpecial
> > > > Paste = xlPasteValues
> > > > Operation = xlNone
> > > > SkipBlanks = False
> > > > Transpose = False
> > > > Application.CutCopyMode = False
> > > >
> > > > 'y se vuelve a la celda activa.
> > > > Range(Celda).Select
> > > > Next Hoja
> > > >
> > > > 'Por último, se vuelve a activar la actualización de pantalla.
> > > > Application.ScreenUpdating = True
> > > > End Sub
> > > > Lo he copiado tal cual.
> > > >
> > > > Gracias anticipadas por tu ayuda.
> > > >
> > > >
> > > >
> > > > "David" escribió:
> > > >
> > > > > Podrías partir del siguiente código:
> > > > >
> > > > > Sub Convertir()
> > > > > Dim Celda As String
> > > > >
> > > > > 'Se guarda copia del libro activo y se detiene la actualización de la
> > > > > pantalla
> > > > > ActiveWorkbook.SaveAs Filename:="Copia de " & ActiveWorkbook.Name
> > > > > Application.ScreenUpdating = False
> > > > >
> > > > > ' ... para cada hoja del libro,
> > > > > For Each Hoja In ActiveWorkbook.Sheets
> > > > > Hoja.Activate
> > > > >
> > > > > 'Se determina la celda activa,
> > > > > Celda = ActiveCell.Address
> > > > >
> > > > > 'Se selecciona toda la hoja y se copia,
> > > > > Range("A1:IV65536").Select
> > > > > Selection.Copy
> > > > >
> > > > > 'pegando luego como valores,
> > > > > Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
> > > > > SkipBlanks _
> > > > > :=False, Transpose:=False
> > > > > Application.CutCopyMode = False
> > > > >
> > > > > 'y se vuelve a la celda activa.
> > > > > Range(Celda).Select
> > > > > Next Hoja
> > > > >
> > > > > 'Por último, se vuelve a activar la actualización de pantalla.
> > > > > Application.ScreenUpdating = True
> > > > > End Sub
> > > > >
> > > > > y personalizarlo según lo necesites...
> > > > >
> > > > >
> > > > >
> > > > > "Cesar Yanapa Z." escribió:
> > > > >
> > > > > > Estimados,
> > > > > > Tengo una hoja excel de casi 9 megas, tiene formúlas, extrae datos de muchos
> > > > > > otros files,etc.
> > > > > > Bien, toda la información compilada en este file necesito envíarsela a los
> > > > > > gerentes de territorio, pero como comprenderán es demasiado extenso.
> > > > > > Es posible crear una macro para que desde este file se cree una copia del
> > > > > > file sólo valores, sin ningun link o fórmula.
> > > > > >
> > > > > > Gracias anticipadas por su ayuda.
> > > > > >
> > > > > > Cesar Yanapa Z.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida