Excel - MACRO, k se ejecute a los 15 seg. de abrir excel ?

 
Vista:

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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:MACRO, k se ejecute a los 15 seg. de abrir exce

Publicado por haver (149 intervenciones) el 27/02/2007 18:24:50
Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"

es esto lo k tengo k poner ?

si quieres que se ejecute a los 15 segundos de haber abierto si

si no en el Visual en la seccion thisworkbooks pones el procedimiento
Sub Workbook_Open()
aqui ira la linea de actualizacion de tus datos (utiliza la grabadora de macros)
end sub

en caso k sea esto, k quiere decir el 00.00.15 son 15 segundos ?
si

en caso k sea esto, k es my_procedure ? se tiene k modificar ?
my_procedure es el nombre del procedimiento a ejecutar despues de los 15 segundos
aqui ira tu codigo o el nombre del procedimiento al que deseas llamar

en caso k sea esto, dnd debo colocarlo exactamente en todo el codigo k tengo ?

lo puedes colocar en un modulo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:MACRO, k se ejecute a los 15 seg. de abrir exce

Publicado por aklamath (92 intervenciones) el 27/02/2007 18:33:26
osea k abro un modulo y pongo directamente:

Sub Application.OnTime Now + TimeValue("00:00:15"), "nombre_de_lo_otra_macro"

End Sub

Y nose puede poner en la misma macro k ya tengo hecha ? en la k esta en la primera nota de este tema ?

Perdonad, pero de macros voy un poco justito ! ;-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Abraham Valencia
Val: 313
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

RE:MACRO, k se ejecute a los 15 seg. de abrir exce

Publicado por Abraham Valencia (2415 intervenciones) el 27/02/2007 18:38:44
Primero, no olvides que ahi no pusiste una macro, sino varias, tu macro auto_open, colocala asi:

Sub auto_open()

Application.OnTime Now + TimeValue("00:00:15"), "nombredelamacroaactivar"

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

Abraham
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:MACRO, k se ejecute a los 15 seg. de abrir exce

Publicado por aklamath (92 intervenciones) el 27/02/2007 18:48:11
ok, supongo k debe quedar asi entonces:

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("DJ3H15").Range("A" & Cells.Rows.Count) = Date
Call cambio_todo_a_15_dias
'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()

Application.OnTime Now + TimeValue("00:00:15"), "cambio_todo_a_15_dias"

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



para los 15 segundos llamo a: Call cambio_todo_a_15_dias , no ?
otra cosa, si quisiera agregar otra call para esta macro pero k esta en otra hoja ?

debo poner debajo de Call cambio_todo_a_15_dias
simplemente call nombre de la otra macro

y tb deberia modificar el ontimenow ? agregando una segunda linea ?

esk la verdad me interesaria k esta macro grande, me ejecute unas 4 macros ! con las mismas condiciones, de lunes a viernes, a los 15 seg. etc...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Abraham Valencia
Val: 313
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

RE:MACRO, k se ejecute a los 15 seg. de abrir exce

Publicado por Abraham Valencia (2415 intervenciones) el 27/02/2007 19:04:11
Solo agrega mas lineas, ejemplo:

Application.OnTime Now + TimeValue("00:00:02"), "bbb"
Application.OnTime Now + TimeValue("00:00:02"), "ccc"
Application.OnTime Now + TimeValue("00:00:02"), "ddd"

Eso si, ten en cuenta que las macros coiemnzan a activarse empezando por la de la ultima linea y de ahi en ese orden, hasta terminar n la primera. Es decir, primero corre ddd, despues ccc y al ultimo bbb. Ah, y no coloca CALL entre las comillas, ni en ninguna parte de esas lineeas!!!!! Lo digo porsiacaso.

Y, a que te refieres con macros de otras hojas??? a otro modulo habras querido decir??? Pues, es lo mimso que esten en un modulo u otro, se coloca el nomnre y listo.

Abraham
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:MACRO, k se ejecute a los 15 seg. de abrir exce

Publicado por aklamath (92 intervenciones) el 27/02/2007 19:09:26
ok, gracias, no tiene relevancia la k se me ejecute primero, cada una va por separado, pero siempre va bien saberlo.

respecto a lo de otras hojas, quiero decir k las otras macros k ejecuta la MACRO GENERAL, pues cada una de ellas esta en otra hoja, pero claro, es lo k dices, k es lo mismo, ya k cada macro en su propio modulo ya se le dice en k hoja debe hacerlo, de ser asi gracias por todo, teneis unas cevecitas pagadas por tarragona !! ;-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

NO SALE BIEN el OnTime Now + TimeValue

Publicado por aklamath (92 intervenciones) el 27/02/2007 19:41:26
No sale bien pq cada vez k ejecuto el excel se me ejecuta la macro y solo debe ejecutarse una vez al dia.
alguna solucion ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:NO SALE BIEN el OnTime Now + TimeValue

Publicado por José Luis (700 intervenciones) el 27/02/2007 23:01:51
Graba un "semáforo", un fichero, en una hoja o celda oculta, algo que indique la fecha de la última ejecución de la macro, cuando vuelvas a abrir el fichero, si la fecha coincide desactivas la ejecución, en caso contrario activas la ejecución.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:NO SALE BIEN el OnTime Now + TimeValue

Publicado por JuanC (792 intervenciones) el 27/02/2007 23:35:47
No te ofendas con lo que voy a decir...
La solución es que tomés un papel y un lápiz;
imprimas el código completo y lo estudies hasta que
lo entiendas, si no lo entendés es porque aún no tenés los conocimientos
suficientes; pues bien, en ese caso es hora de ponerse a leer desde el
principio... me parece que pretendés correr sin saber caminar...
Si prestáras atención verías que el código ya hace una comprobación con
un "semáforo" -como dice José Luis- para ejecutarse una sola vez al día
Te recomiendo que vayas más despacio si querés llegar lejos...

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:NO SALE BIEN el OnTime Now + TimeValue

Publicado por aklamath (92 intervenciones) el 28/02/2007 18:55:13
Gracias juan, la verdad esk tienes razon !! ;-)

Pero tal como puse el ultimo codigo, con el timevalue, se me ejecuta la macro cada vez k enciendo el excel a los 15 segundos y luego una vez mas, pero solo una al dia aunk lo habra 100 veces.
Osea k si lo habria 100 veces se me ejecutaria la macro 101 veces, las 100 k habra mas 1 al dia.

Y me interesa solo una vez al dia y k sea a los 15 segundos una vez se activa dentro del horario y dentro de esos dias tal como está.

El CODIGO K PUSE ERA ESTE:

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("DJ3H15").Range("A" & Cells.Rows.Count) = Date
Call cambio_todo_a_15_dias
'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()

Application.OnTime Now + TimeValue("00:00:15"), "cambio_todo_a_15_dias"

If Weekday(Date, vbSunday) = 1 Or Weekday(Date, vbSunday) = 7 Then
Exit Sub
End If

If Worksheets("DJ3H15").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



Con este codigo se me ejecuta cada vez k habro el excel cada 15 segundos, a parte otra vez pero solo una al dia.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:NO SALE BIEN el OnTime Now + TimeValue

Publicado por Anonimo (69 intervenciones) el 28/02/2007 20:11:01
...............y cuando empezaras a hacer tus cosas solo?.....................
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar