MACRO, k se ejecute a los 15 seg. de abrir excel ?
Publicado por aklamath (92 intervenciones) el 27/02/2007 18:10:16
Holaaaaa, buenas tardes exceleros !
Mirad, tengo una macro k muy amablemente me ayudo JuanC, ya debeis conocerle, uno de los maestros de este foro y mi consulta es la siguiente:
Esta macro esta ideada para k se ejecute cada dia entre las 18.30 y las 23.55,
esta macro ejecuta otras macros k tengo grabadas en el excel.
esta macro solo se ejecuta de lunes a viernes
Pero, quisiera k cada dia k se actualiza entre ese horario cuando habra el excel (por ejemplo) a las 20.00 k antes de ejecutarse se me actualizen los datos internos del excel, actualizaciones externas (datos) por lo k debe ponerse un "temporizador" para k se ejecute la macro.
Leyendo por este foro he encontrado esto:
Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"
es esto lo k tengo k poner ?
en caso k sea esto, k quiere decir el 00.00.15 son 15 segundos ?
en caso k sea esto, k es my_procedure ? se tiene k modificar ?
en caso k sea esto, dnd debo colocarlo exactamente en todo el codigo k tengo ?
aqui os dejo el k tengo yo, thanks:
Option Explicit
Option Private Module
'''''''''''''''''''''''''''''''
'By JuanC para Bolsaklamath.com - 20 de Febrero 2006
'''''''''''''''''''''''''''''''
Private Declare Function apiSetTimer Lib "user32" Alias "SetTimer" (ByVal hwnd As Long, ByVal nIDEvent As Long, _
ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function apiKillTimer Lib "user32" Alias "KillTimer" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Private lTimerID As Long
Private bRunning As Boolean
Sub Macro()
If Not bRunning Then Exit Sub
'Guarda la fecha actual en una celda para saber
'que ya fue ejecutada una vez en el día
Worksheets("G1").Range("A" & Cells.Rows.Count) = Date
Call cambio_todo_a_15_dias
Call dojis_ayer
'Aquí va tu código o el llamado a una rutina (Sub/Function)
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub main()
Call StartTimer(1000)
End Sub
Private Sub StartTimer(ByVal lInterval As Long)
On Error Resume Next
lTimerID = apiSetTimer(0, 0, lInterval, AddressOf TimerCallBack)
bRunning = IIf(lTimerID = 0, False, True)
End Sub
Public Sub TimerCallBack(ByVal hwnd As Long, ByVal uMsg As Long, _
ByVal idEvent As Long, ByVal dwTime As Long)
Dim H As Date
H = Format(Time, "Hh:Mm:SsAM/PM")
If H >= CDate("06:30:00PM") And H <= CDate("23:55:00PM") Then
Call StopTimer
Call Macro
bRunning = False
End If
End Sub
Private Sub StopTimer()
On Error Resume Next
apiKillTimer 0, lTimerID
End Sub
Sub auto_open()
If Weekday(Date, vbSunday) = 1 Or Weekday(Date, vbSunday) = 7 Then
Exit Sub
End If
If Worksheets("G1").Range("A" & Cells.Rows.Count) <> Date Then
Call main
End If
End Sub
Sub auto_close()
On Error Resume Next
Call StopTimer
On Error GoTo 0
End Sub
Mirad, tengo una macro k muy amablemente me ayudo JuanC, ya debeis conocerle, uno de los maestros de este foro y mi consulta es la siguiente:
Esta macro esta ideada para k se ejecute cada dia entre las 18.30 y las 23.55,
esta macro ejecuta otras macros k tengo grabadas en el excel.
esta macro solo se ejecuta de lunes a viernes
Pero, quisiera k cada dia k se actualiza entre ese horario cuando habra el excel (por ejemplo) a las 20.00 k antes de ejecutarse se me actualizen los datos internos del excel, actualizaciones externas (datos) por lo k debe ponerse un "temporizador" para k se ejecute la macro.
Leyendo por este foro he encontrado esto:
Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"
es esto lo k tengo k poner ?
en caso k sea esto, k quiere decir el 00.00.15 son 15 segundos ?
en caso k sea esto, k es my_procedure ? se tiene k modificar ?
en caso k sea esto, dnd debo colocarlo exactamente en todo el codigo k tengo ?
aqui os dejo el k tengo yo, thanks:
Option Explicit
Option Private Module
'''''''''''''''''''''''''''''''
'By JuanC para Bolsaklamath.com - 20 de Febrero 2006
'''''''''''''''''''''''''''''''
Private Declare Function apiSetTimer Lib "user32" Alias "SetTimer" (ByVal hwnd As Long, ByVal nIDEvent As Long, _
ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function apiKillTimer Lib "user32" Alias "KillTimer" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Private lTimerID As Long
Private bRunning As Boolean
Sub Macro()
If Not bRunning Then Exit Sub
'Guarda la fecha actual en una celda para saber
'que ya fue ejecutada una vez en el día
Worksheets("G1").Range("A" & Cells.Rows.Count) = Date
Call cambio_todo_a_15_dias
Call dojis_ayer
'Aquí va tu código o el llamado a una rutina (Sub/Function)
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub main()
Call StartTimer(1000)
End Sub
Private Sub StartTimer(ByVal lInterval As Long)
On Error Resume Next
lTimerID = apiSetTimer(0, 0, lInterval, AddressOf TimerCallBack)
bRunning = IIf(lTimerID = 0, False, True)
End Sub
Public Sub TimerCallBack(ByVal hwnd As Long, ByVal uMsg As Long, _
ByVal idEvent As Long, ByVal dwTime As Long)
Dim H As Date
H = Format(Time, "Hh:Mm:SsAM/PM")
If H >= CDate("06:30:00PM") And H <= CDate("23:55:00PM") Then
Call StopTimer
Call Macro
bRunning = False
End If
End Sub
Private Sub StopTimer()
On Error Resume Next
apiKillTimer 0, lTimerID
End Sub
Sub auto_open()
If Weekday(Date, vbSunday) = 1 Or Weekday(Date, vbSunday) = 7 Then
Exit Sub
End If
If Worksheets("G1").Range("A" & Cells.Rows.Count) <> Date Then
Call main
End If
End Sub
Sub auto_close()
On Error Resume Next
Call StopTimer
On Error GoTo 0
End Sub
Valora esta pregunta


0