jueves, 6 de junio de 2013

VBA: Ejecutar una macro de Excel a una hora determinada.

Hoy aprenderemos qué método debemos emplear para ejecutar una macro en un momento del tiempo (hora, minuto y segundo del día) concreto. Se trata de dejar programada la ejecución de un procedimiento a una hora determinada.
Si bien habrá que tener presente que para que este método surta su efecto el Libro debe estar abierto!!!.

El método Application.OnTime programa, entonces, la ejecución de un procedimiento a una hora especificada o después del transcurso de un período de tiempo específico.

Veamos un ejemplo, para lo que construiremos un evento Open para activar el método .OnTime e indicar a qué hora queremos ejecutar nuestra macro llamada 'MacroPrincipal'.
Por tanto accederemos al Editor de VBA (alt+F11) e insertaremos en ThisWorkbook el siguiente código:

Private Sub Workbook_Open()
Application.OnTime TimeValue("17:30:00"), "MacroPrincipal"
End Sub



Adicionalmente en un módulo del Editor de VBA añadiremos las líneas de nuestra macro:

Sub MacroPrincipal()
MsgBox "Hola, son las 17:30 y se ha ejecutado la MacroPrincipal"
End Sub



Ya sólo nos queda esperar a que la hora de nuestro sistema (de nuestro equipo) llegue a las 17:30:00, en ese instante se ejecutará el procedimiento indicado, en el ejemplo la macro 'MacroPrincipal'... apareciendo el mensaje (MsgBox):

VBA: Ejecutar una macro de Excel a una hora determinada.



Si en lugar de programar a una hora concreta queremos ejecutar una macro 10 segundos después de la apertura de nuestro Libro, en el editor de VBA en ThisWorkbook incluiríamos las siguientes líneas en un evento Open, y en un Módulo aparte la MacroPrincipal:

Private Sub Workbook_Open()
Application.OnTime Now + TimeValue("00:00:10"), "MacroPrincipal"
End Sub



Como comentaba al principio, el único inconveniente de este método es que,lógicamente, requiere tener abierto el Libro de trabajo.

5 comentarios:

  1. Maravilloso, funciona a la perfección, amigo eres genial gracias por compartir.

    Saludos!!

    ResponderEliminar
  2. Hola ismael buenas tardes...como podria variar el codigo para que despues de abierto el libro, se ejecute la macro todos los dias a la misma hora mientras este abierto.

    ResponderEliminar
    Respuestas
    1. Hola Edison,
      para repetir, en un libro abierto, una misma macro periódicamente... puedes leer este otro ejemplo
      http://excelforo.blogspot.com.es/2014/02/vba-repetir-una-macro-cada-x-tiempo.html

      verás que la clave es definir el periodo de repetición...

      Espero te sirva.
      Saludos

      Eliminar