¿Cómo se pone un Countdown a las 10:00 am, 2:00 pm, 8 :00 pm?

Tengo que ejecutar una macro a estas horas 10:00 am, 2:00 pm, 8 :00 pm, a veces se me olvida y como sabrán tengo consecuencias, como podría poner un countdown que me recuerde 30 segundos antes de cada hora mencionada, o que se ejecute la macro después del countdown.

Respuesta
3

El VBA de Excel dispone del método OnTime, que ejecuta un procedimiento a la hora que se le diga.

Habría que pegar este código en el módulo del libro (en Thisworkbook):

Private Sub Workbook_Open()
    Dim dtSiguiente As Date
    Select Case Time
        Case Is < #8:00:00 AM#
            Application.OnTime #8:00:00 AM#, "Mi_proc"
        Case Is < #2:00:00 PM#
            Application.OnTime #2:00:00 PM#, "Mi_proc"
        Case Is < #8:00:00 PM#
            Application.OnTime #8:00:00 PM#, "Mi_proc"
    End Select
End Sub

con lo que conseguimos que Mi_proc se ejecute a la siguiente hora más próxima después de la apertura del libro.

Y habría que pegar también el mismo código (obviamente quitando la primera y última línea) al final de Mi_proc, para que quede establecida automáticamente la siguiente hora a la que debe ejecutarse.

Saludos_

Se me olvidó quitar la variable que usé para hacer pruebas. La línea

    Dim dtSiguiente As Date

se puede eliminar puesto que declara una variable que luego no se utiliza.

Saludos_

Jrgces te agradezco por tu tiempo

Metí el código siguiendo tus indicaciones y no me arrojo resultado alguno, y discúlpame pero después de cada hora "mi_proce" debo poner algo o es así.

Hay que sustituir "Mi_proc" por el nombre del procedimiento que debe ser ejecutado a esas horas.

Saludos_

1 respuesta más de otro experto

Respuesta
3

Gonzalo, quiero dejar claro que de Excel no tengo ni idea, pero por si te puede dar una idea, te digo como lo haría en Access.

Es de suponer que tienes un formulario, no lo sé, pero si fuera así yo le pondría un cuadro de texto, con formato Hora larga. Llamaremos a este cuadro Aviso. Todo depende de la precisión que quieras en el aviso. Si cuando se cumple el primer segundo, del minuto, o aunque haya un retraso de segundos en el aviso. En las propiedades del formulario en el evento Al abrir le pondría

Private Sub Form_Open(Cancel As Integer)

Aviso=Time()
Me.TimerInterval = 1000
End Sub

Es decir que cuando abras el formulario que el cuadro de texto Aviso te muestre la hora del sistema y que empiece a contar segundos. Y en el evento Al cronómetro le pondría

Private Sub Form_Timer()
Aviso = Time()
If Aviso = #9:30:00 AM# Then
MsgBox "Nene, que es la hora"
ElseIf Aviso = #1:30:00 PM# Then
'lo que quieres que haga en este caso
ElseIf Aviso = #7:30:00 PM# Then
' lo otro
End If
End Sub

De forma que te quedara

Si tienes los altavoces del ordenador puestos le puedes decir que el mensaje sea verbal, o bien con tu voz o bien con la voz del sistema, o que ejecute la macro que tengas.

Quizá te dé una idea, porque como te dije, de Excel no se nada, sólo su nombre.

Por cierto, puedes observar un cierto retraso entre la hora que te aparece en Aviso y la hora que muestra el sistema. Eso es debido a que quizá abras el formulario cuando el reloj del sistema ya vaya por el segundo 25 o el 40, y sin embargo Aviso empieza a contar desde 0. Por eso te decía lo de la precisión.

¡Gracias! julián. Y si me gusta la opción que muestras aunque también reconozco que para mi access es aguas profundas y no se nadar, por decir describirlo de alguna forma, pero gracias por tomarte el tiempo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas