PDA

Ver la versión completa : Ayuda con excel



Adonis74
09/08/2009, 05:02
Hola, un saludo a todos, necesito me ayuden con una macro que me guarde un documento de Excel a una hora determinada todos los días, es un documento que esta abierto constantemente y toma unos valores mediante un link con un software llamado Ion Enterprise en sistema scada a las 12 de la noche. Yo necesito que a esa hora el documento se guarde automáticamente sin cerrarse, ya logré que al guardarlo manualmente se haga en formato html generando un archivo web con el mismo nombre y en el mismo directorio, pero necesito que esta acción de guardar sea automática, conozco la opción de auto-guardar, pero por alguna razón no se me activa y al no aparecerme en los complementos del menú Herramientas no se como activarla manualmente desde el directorio de office donde tengo la instalación.

En fin, la macro lo que haría seria a las doce de la noche guardar el documento, de lo demás me puedo encargar, pero si la ayuda quiere venir completa pues agradecido, seria entonces guardar a las 12 y crear un archivo en html en el mismo directorio del original.

Un saludo nuevamente a todos.

Arielo
18/12/2009, 18:33
No había visto este tema.
A ver si te sirve esto:

En el editor de Visual Basic de la planilla que necesitas grabar (en el ejemplo la llamaremos "Libro1.xls"), ir a la parte del código de ThisWorkbook.

Allí, crearemos una sub privada, llamada "Workbook_Open()" con el siguiente código:

Private Sub Workbook_Open()
Application.OnTime TimeValue("00:00:00"), "AutoGrabar"
End Sub
Esta sub, se ejecutará automáticamente cada vez que abramos el libro donde esté contenida.
Lo que hace al ejecutarse, es decirle a Excel que ejecute la macro "AutoGrabar", a las 00:00:00 horas de cada día.

Luego, en un módulo cualquiera, creamos la sub que se ejecutará, a la que llamamos "AutoGrabar":


Sub AutoGrabar()

If Dir("C:\Libro1.htm") <> "" Then
Kill "C:\Libro1.htm"
End If
ActiveWorkbook.SaveAs Filename:= _
"C:\Libro1.htm", FileFormat:=xlHtml, ReadOnlyRecommended:= _
False, CreateBackup:=False

If Dir("C:\Libro1.xls") <> "" Then
Kill "C:\Libro1.xls"
End If
ActiveWorkbook.SaveAs Filename:= _
"C:\Libro1.xls", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
End Sub

Veamos detalladamente la sub AutoGrabar:

If Dir("C:\Libro1.htm") <> "" Then
Kill "C:\Libro1.htm"
End IfEsta porción de código, hace una comprobación: Si existe el archivo "C:\Libro1.htm"
En caso de que exista, lo elimina.


ActiveWorkbook.SaveAs Filename:= _
"C:\Libro1.htm", FileFormat:=xlHtml, ReadOnlyRecommended:= _
False, CreateBackup:=FalseAquí, la sub se encarga de guardar la planilla actual, en formato HTML. Si no hubiéramos eliminado este archivo antes, hubiéramos tenido que estar pendiente a esa hora, de confirmar la sobreescritura del archivo, y se hubiera perdido la "gracia" de la macro...

Luego, vuelve a comprobar si existe un archivo. En este caso, si existe el de formato excel:

If Dir("C:\Libro1.xls") <> "" Then
Kill "C:\Libro1.xls"
End IfSi existe lo elimina...

y, graba la planilla actual en formato excel:

ActiveWorkbook.SaveAs Filename:= _
"C:\Libro1.xls", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False

El motivo por el que primero grabamos el archivo en formato HTML y luego el XLS, es simplemente porque el archivo que quedará abierto será el segundo...

Espero que te sirva, y no sea tarde ya...






.