Ejecucion automatica de un procedimiento

26/04/2005 - 10:00 por Rantamplan | Informe spam
Buenas,
quiero que a las 22:00h, diariamente, se guarde el libro abierto con un
nombre específico (con formato dd.mm.yyyy).
Para ello he realizado dos procedimientos:

Public Sub Grabacion_Diaria()
Application.OnTime TimeValue("22:00:00"),"GuardarComo"
End Sub

Public Sub GuardarComo()
dia_actual = Format(Date,"d.mmmm.yyyy")
fichero = "c:\"+dia_actual+".xls"
Application.ActiveWorkok.ActiveSheet.SaveAs Filename:=fichero
End Sub

El problema lo tengo es que no se donde ubicar ese codigo (dentro de una
hoja, ThisWorkBook, un modulo... etc etc) para que se ejecute cuando llegue
la hora indicada.
Por lo que he leido el evento OnTime no está asociado a ningun objeto, se
accede a ellos medianto métodos del objeto Application, pero no acabo de
pillarle el puntillo y no se muy bien donde ubicar el codigo o como
enlazarlo.

Gracias,
Salu2!.



"los videojuegos no tienen ninguna influencia sobre los niños.
Quiero decir, si el Pac-Man hubiese influenciado a nuestra generación,
estaríamos todos corriendo en salas oscuras, masticando píldoras
mágicas y escuchando músicas electrónicas repetitivas".
Kristian Wilson, Nintendo Inc., 1989

Preguntas similare

Leer las respuestas

#1 KL
26/04/2005 - 11:21 | Informe spam
Hola Rantamplan,

El truco esta en que de alguna manera tienes que volver a llamar el
procedimiento GrabacionDiaria cada vez que se haya ejecutado. Prueba lo
siguiente (hecho a base del codigo para conseguir el parpadeo de celdas
publicado por Fernando Arroyo en este sitio:
http://www.excelsp.com/faqs01.htm#faqs01_15 ):

1) En el modulo ThisWorkbook(EsteLibro) pon este codigo:

'--Modulo ThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
DetenerGrabacion
End Sub

Private Sub Workbook_Open()
IniciarGrabacion
End Sub
'--Modulo ThisWorkbook

2) En un modulo estandar (no de hoja , libro o formulario) digamos Modulo1
pon:

'--Modulo1
Dim Hora As Date

Sub IniciarGrabacion()
Hora = TimeValue("22:00:00")
Call GuardarComo
Application.OnTime Hora, "IniciarGrabacion"
End Sub

Sub DetenerGrabacion()
Application.OnTime Hora, "IniciarGrabacion", schedule:=False
End Sub

Public Sub GuardarComo()
dia_actual = Format(Date,"d.mmmm.yyyy")
fichero = "c:\"+dia_actual+".xls"
Application.ActiveWorkok.ActiveSheet.SaveAs Filename:=fichero
End Sub
'--Modulo1

3) Guarda, cierra y vuelve a abrir el archivo.

Saludos,
KL


Public Sub Grabacion_Diaria()
Application.OnTime TimeValue("22:00:00"),"GuardarComo"
End Sub

Public Sub GuardarComo()
dia_actual = Format(Date,"d.mmmm.yyyy")
fichero = "c:\"+dia_actual+".xls"
Application.ActiveWorkok.ActiveSheet.SaveAs Filename:=fichero
End Sub

El problema lo tengo es que no se donde ubicar ese codigo (dentro de una
hoja, ThisWorkBook, un modulo... etc etc) para que se ejecute cuando
llegue
la hora indicada.
Por lo que he leido el evento OnTime no está asociado a ningun objeto, se
accede a ellos medianto métodos del objeto Application, pero no acabo de
pillarle el puntillo y no se muy bien donde ubicar el codigo o como
enlazarlo.

Gracias,
Salu2!.



"los videojuegos no tienen ninguna influencia sobre los niños.
Quiero decir, si el Pac-Man hubiese influenciado a nuestra generación,
estaríamos todos corriendo en salas oscuras, masticando píldoras
mágicas y escuchando músicas electrónicas repetitivas".
Kristian Wilson, Nintendo Inc., 1989
Respuesta Responder a este mensaje
#2 KL
26/04/2005 - 11:52 | Informe spam
Hola de nuevo,

Aqui te pongo el codigo ligeramente modificado para que no se dispare el
procedimiento principal al abrir el archivo.

Saludos,
KL

'--Modulo ThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
DetenerGrabacion
End Sub

Private Sub Workbook_Open()
Application.OnTime TimeValue(Hora), "IniciarGrabacion"
End Sub
'--Modulo ThisWorkbook

'--Modulo1
Public Const Hora = "22:00:00"

Sub IniciarGrabacion()
'Hora If Saltar = False Then GuardarComo
Application.OnTime TimeValue(Hora), _
"IniciarGrabacion"
Saltar = False
End Sub

Sub DetenerGrabacion()
Application.OnTime TimeValue(Hora), _
"IniciarGrabacion", schedule:=False
End Sub

Public Sub GuardarComo()
dia_actual = Format(Date, "d.mmmm.yyyy")
fichero = "c:\" + dia_actual + ".xls"
Application.ActiveWorkok.ActiveSheet.SaveAs Filename:=fichero
End Sub
'--Modulo1
Respuesta Responder a este mensaje
#3 Rantamplan
26/04/2005 - 12:33 | Informe spam
"KL" Escribió el día mar 26 abr
2005 11:52:53a:

Hola de nuevo,

Aqui te pongo el codigo ligeramente modificado para que no se dispare


el
procedimiento principal al abrir el archivo.

Saludos,
KL

'--Modulo ThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
DetenerGrabacion
End Sub

Private Sub Workbook_Open()
Application.OnTime TimeValue(Hora), "IniciarGrabacion"
End Sub
'--Modulo ThisWorkbook

'--Modulo1
Public Const Hora = "22:00:00"

Sub IniciarGrabacion()
'Hora > If Saltar = False Then GuardarComo
Application.OnTime TimeValue(Hora), _
"IniciarGrabacion"
Saltar = False
End Sub

Sub DetenerGrabacion()
Application.OnTime TimeValue(Hora), _
"IniciarGrabacion", schedule:=False
End Sub

Public Sub GuardarComo()
dia_actual = Format(Date, "d.mmmm.yyyy")
fichero = "c:\" + dia_actual + ".xls"
Application.ActiveWorkok.ActiveSheet.SaveAs Filename:=fichero
End Sub
'--Modulo1





Buenas,
Ante todo gracias por la pronta respuesta, que me esta siendo de gran
ayuda.
Al copair tu codigo a mi fichero de excel, recibo el siguiente mensaje de
error:

Se ha producido el error '1004' en tiempo de ejecución:
Error en el método 'OnTime' de objeto '_Application' situándose el fallo
sobre el procedimiento DetenerGrabacion().

No sé donde puede estar el error porque el código parece estar
correcto... seguro que algo se me está escapando :-(

Gracias!
Salu2.


"los videojuegos no tienen ninguna influencia sobre los niños.
Quiero decir, si el Pac-Man hubiese influenciado a nuestra generación,
estaríamos todos corriendo en salas oscuras, masticando píldoras
mágicas y escuchando músicas electrónicas repetitivas".
Kristian Wilson, Nintendo Inc., 1989
Respuesta Responder a este mensaje
#4 KL
26/04/2005 - 12:47 | Informe spam
Hola Rantamplan,

Creo que el error se tiene que producir solo una vez al copiar, guardar e
intentar cerrar el fichero. Esto se debe a que el procedimiento
"DetenerGrabacion" intenta parar un OnTime que no se ha lanzado. La proxima
vez que abras el fichero se lanzara primero "IniciarGrabacion" y luego al
cerrar "DetenerGrabacion" correctamente.

Comenta si esto no resuelve tu duda.

Saludos,
KL

"Rantamplan" wrote in message
news:
"KL" Escribió el día mar 26 abr
2005 11:52:53a:

Hola de nuevo,

Aqui te pongo el codigo ligeramente modificado para que no se dispare


el
procedimiento principal al abrir el archivo.

Saludos,
KL

'--Modulo ThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
DetenerGrabacion
End Sub

Private Sub Workbook_Open()
Application.OnTime TimeValue(Hora), "IniciarGrabacion"
End Sub
'--Modulo ThisWorkbook

'--Modulo1
Public Const Hora = "22:00:00"

Sub IniciarGrabacion()
'Hora >> If Saltar = False Then GuardarComo
Application.OnTime TimeValue(Hora), _
"IniciarGrabacion"
Saltar = False
End Sub

Sub DetenerGrabacion()
Application.OnTime TimeValue(Hora), _
"IniciarGrabacion", schedule:=False
End Sub

Public Sub GuardarComo()
dia_actual = Format(Date, "d.mmmm.yyyy")
fichero = "c:\" + dia_actual + ".xls"
Application.ActiveWorkok.ActiveSheet.SaveAs Filename:=fichero
End Sub
'--Modulo1





Buenas,
Ante todo gracias por la pronta respuesta, que me esta siendo de gran
ayuda.
Al copair tu codigo a mi fichero de excel, recibo el siguiente mensaje de
error:

Se ha producido el error '1004' en tiempo de ejecución:
Error en el método 'OnTime' de objeto '_Application' situándose el fallo
sobre el procedimiento DetenerGrabacion().

No sé donde puede estar el error porque el código parece estar
correcto... seguro que algo se me está escapando :-(

Gracias!
Salu2.


"los videojuegos no tienen ninguna influencia sobre los niños.
Quiero decir, si el Pac-Man hubiese influenciado a nuestra generación,
estaríamos todos corriendo en salas oscuras, masticando píldoras
mágicas y escuchando músicas electrónicas repetitivas".
Kristian Wilson, Nintendo Inc., 1989
Respuesta Responder a este mensaje
#5 Rantamplan
26/04/2005 - 13:03 | Informe spam
"KL" Escribió el día mar 26 abr
2005 12:47:34p:

Hola Rantamplan,

Creo que el error se tiene que producir solo una vez al copiar,
guardar e intentar cerrar el fichero. Esto se debe a que el
procedimiento "DetenerGrabacion" intenta parar un OnTime que no se ha
lanzado. La proxima vez que abras el fichero se lanzara primero
"IniciarGrabacion" y luego al cerrar "DetenerGrabacion" correctamente.

Comenta si esto no resuelve tu duda.

Saludos,
KL

"Rantamplan" wrote in message
news:
"KL" Escribió el día mar 26 abr
2005 11:52:53a:

Hola de nuevo,

Aqui te pongo el codigo ligeramente modificado para que no se
dispare


el
procedimiento principal al abrir el archivo.

Saludos,
KL

'--Modulo ThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
DetenerGrabacion
End Sub

Private Sub Workbook_Open()
Application.OnTime TimeValue(Hora), "IniciarGrabacion"
End Sub
'--Modulo ThisWorkbook

'--Modulo1
Public Const Hora = "22:00:00"

Sub IniciarGrabacion()
'Hora >>> If Saltar = False Then GuardarComo
Application.OnTime TimeValue(Hora), _
"IniciarGrabacion"
Saltar = False
End Sub

Sub DetenerGrabacion()
Application.OnTime TimeValue(Hora), _
"IniciarGrabacion", schedule:=False
End Sub

Public Sub GuardarComo()
dia_actual = Format(Date, "d.mmmm.yyyy")
fichero = "c:\" + dia_actual + ".xls"
Application.ActiveWorkok.ActiveSheet.SaveAs Filename:=fichero
End Sub
'--Modulo1





Buenas,
Ante todo gracias por la pronta respuesta, que me esta siendo de gran
ayuda.
Al copair tu codigo a mi fichero de excel, recibo el siguiente
mensaje de error:

Se ha producido el error '1004' en tiempo de ejecución:
Error en el método 'OnTime' de objeto '_Application' situándose el
fallo sobre el procedimiento DetenerGrabacion().

No sé donde puede estar el error porque el código parece estar
correcto... seguro que algo se me está escapando :-(

Gracias!
Salu2.


"los videojuegos no tienen ninguna influencia sobre los niños.
Quiero decir, si el Pac-Man hubiese influenciado a nuestra
generación, estaríamos todos corriendo en salas oscuras, masticando
píldoras mágicas y escuchando músicas electrónicas repetitivas".
Kristian Wilson, Nintendo Inc., 1989






Ok, eso paree que ya está solucionado (al menos cuando abro el fichero no
me indica ningún fallo de ese tipo).
Lo que si me indica es el siguiente fallo cuando llega la hora que le
asigno para que se ejecute:

Se ha producido el error '438' en tiempo de ejecución:
El objeto no admite esta propiedad o método.

Situándose el cursor sobre el procedimiento GuardarComo() y más
concretamente sobre la línea:
Application.ActiveWorkBook.ActiveSheet.SaveAs Filename:=fichero

creo que hace referencia al '.SaveAs' que no lo reconoce.(hasta el punto
del ActiveSheet si me aparece el autocompletado, pero par el SaveAs
nop!).

Gracias!
Salu2.

"los videojuegos no tienen ninguna influencia sobre los niños.
Quiero decir, si el Pac-Man hubiese influenciado a nuestra generación,
estaríamos todos corriendo en salas oscuras, masticando píldoras
mágicas y escuchando músicas electrónicas repetitivas".
Kristian Wilson, Nintendo Inc., 1989
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida