Ejecutar automáticamente cada cierto periodo de tiempo un código VBA Excel

La cuestión está así, necesito ejecutar un código cada cierto tiempo. Para ser exactos es una macro grabada que inserta una fórmula en una celda de una hoja de Excel.

Lo he intentado con la función Ontime pero para ser sincero no le entiendo muy bien.

Lo que necesito es lo siguiente:

-> Ejecute Macro

->Espere un minuto

-> Ejecute Macro

-> Espere un Minuto

-> Ejecute Macro

-> Y así siga

Sé que es mucho pedir pero por favor si pueden darme una breve explicación de como funciona Ontime, como iniciarlo y como detenerlo.

De antemano muchísimas gracias a todos.

Que tengan una buena noche.

Un cordial saludo desde Oaxaca, México.

Respuesta
1

Deberías utilizar el evento de aplicación OnTime.

Aquí tienes una explicación clara y detallada de cómo utilizarlo.

http://raymundoycaza.com/ejecutar-una-macro-periodicamente/ 

Si te ha valido la respuesta.

1 respuesta más de otro experto

Respuesta
2

Lo que haces con la función Application. OnTime es ejecutar una macro cuando el tiempo que estableciste es alcanzado.

Por ejemplo, con esta instrucción, le estás diciendo, a partir de este momento (Now) + un minuto se ejecute la macro "repetir".

Application.OnTime Now + TimeValue("00:01:00"), "repetir", , True

En la instrucción TimeValue se ponen horas:minutos:segundos, si quieres que se ejecute cada 5 minutos con 30 segundos, sería así

Application.OnTime Now + TimeValue("00:05:30"), "repetir", , True

Pero también le puedes indicar que se ejecute a las 9 de la mañan, por ejemplo:

Application.OnTime TimeValue("09:30:00"), "repetir", , True

Para aplicarlo en lo que necesitas, podemos ejecutar una macro que se llame "iniciar", le decimos en la macro que la celda A1 sea igual a 0 y que se ejecute la macro "repetir"

Sub iniciar()
'Por.Dante Amor
    Range("A1") = 0
    repetir
End Sub

Ahora bien, en la macro "repetir" ponemos una condición para que la macro se detenga, en la misma macro "repetir" ponemos el código que quieres que se ejecute cada minuto

Sub repetir()
'Por.Dante Amor
    If Range("A1") = 10 Then
        Exit Sub
    End If
    Range("A1") = Range("A1") + 1
    '
    'Instrucciones de tu macro
    'O bien, ejecutar otra macro
    Call MacroDeUsuario
    '
    Application.OnTime Now + TimeValue("00:01:00"), "repetir", , True
End Sub

'

Es importante que antes de la instrucción Application. Ontime, pongas la condición con la que vas a detener la macro. En mi ejemplo, cuando la celda A1 es igual a 10, la macro "repetir" ya no se ejecutará. O puede ser así:

Sub repetir()
'Por.Dante Amor
    If Range("A1") < 10 Then
        Range("A1") = Range("A1") + 1
        '
        Call MacroDeUsuario
        '
        Application.OnTime Now + TimeValue("00:01:00"), "repetir", , True
    End If
End Sub

De esa forma, con una condición, la macro se detendrá.


Saludos. Dante Amor

Muchísimas gracias por responder, usted me ha librado de varios líos y se lo agradezco infinitamente. Solo una preguntita más, ¿el "true" al final del Ontime que significa?...

Que tenga una excelente tarde.

Saludos.

True, es para programar un nuevo procedimiento (macro).

False, es para limpiar el procedimiento (macro) anterior.

Referencia:

https://msdn.microsoft.com/en-us/library/office/ff196165%28v=office.15%29.aspx 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas