Ejecutar Macro según Hora del sistema

02/11/2006 - 22:14 por Pablo Fdez. | Informe spam
Hola a todos.
Necesito ejecutar varias macros ( Macro1 a Macro6) automáticamente en 6
momentos diferentes del día.
La celda (A1) contiene la hora de ejecución de la macro. Esta hora es
variable.

He probado con alguna idea de este foro comparando el valor de la celda (A1)
con el valor de la celda ("Time") que contiene el valor de la hora actual (
actualizada cada 10 seg.)

La comparación de las celdas da 6 valores ( 1 a 6) y cada valor ejecuta una
macro.
El problema es que la macro se ejecuta continuamente durante los 10 segundos
y me bloquea la hoja de trabajo.

Las macros funcionan correctamente de modo manual.

Alguna idea para solucionar este fallo?

Salu2
Pablo Fdez.

Preguntas similare

Leer las respuestas

#6 Héctor Miguel
12/11/2006 - 21:30 | Informe spam
hola, Pablo !

1) [pues yo... 'insisto']... no creo necessario monitorear cada n_segundos para ver cual macro se lanza :))
sobre todo, si comentas que la TD se actualiza con datos externos cada 2 minutos ;)

2) prueba usando en el evento '_calculate' de 'esa' oja una variable estatica que este 'tomando' los cambios
Private Sub Worksheet_Calculate()
Static Dato_Anterior As Byte
On Error Resume Next
If Range("Trigger") = Dato_Anterior Then Exit Sub
Select Case Range("Trigger")
Case 1: FinTurnoMañanaD1
Case 2: FinTurnoTardeD1
Case 3: FinTurnoNocheD1
Case 4: FinTurnoMañanaD2
Case 5: FinTurnoTardeD2
Case 6: FinTurnoNocheD2
End Select
Dato_Anterior = Range("Trigger")
End Sub

-> incluso, si lo unico que es 'variable' es el rango a donde se han de copiar los datos...
podrias utilizar los 'Cases' -solamente- para especificar el rango 'de destino'...
y aprovechar una sola macro de copiado -?-

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
... he logrado crear un reloj sobre el que comparar los 6 momentos en que se disparan mis macros.
El reloj tiene una precision de 1 seg. y he conseguido disparar mis macros en los 6 momentos diarios que deseo.
En Hoja1 tengo este codigo (en "Trigger" esta el valor de la comparacion entre 1 y 6)
Private Sub Worksheet_Calculate()
Worksheet_Change Range("Trigger")
End Sub
Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = Range("Trigger").Address Then
Select Case Target.Value
Case 1
FinTurnoMañanaD1
Case 2
FinTurnoTardeD1
Case 3
FinTurnoNocheD1
Case 4
FinTurnoMañanaD2
Case 5
FinTurnoTardeD2
Case 6
FinTurnoNocheD2
End Select
End If
End Sub
En Modulo1 tengo este codigo
Sub FinTurnoMañanaD1()
Range("O41:Q41").Select
Application.CutCopyMode = False
Selection.Copy
Range("O45:Q45").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
MsgBox "Fin Turno Maà±ana D1"
End Sub
Sub FinTurnoMañanaD1()
Range("O41:Q41").Select
Application.CutCopyMode = False
Selection.Copy
Range("O46:Q46").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
MsgBox "Fin Turno Maà±ana D1"
End Sub
Las restantes 4 macros son identicas y solo cambia el rango de pegado.
El problema es que.. la macro... se autoejecuta de manera continua al estar evaluando o autocalculando los cambios en Hoja1.
como lograria evitar esta ejecucion repetitiva?
Los datos a copiar (Range("O41:Q41")) proceden de una tabla dinamica que se actualiza cada 2 minutos de de una consulta externa.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida