Você está na página 1de 3

Excel VBA - Agendando a execuo de macros com a funo OnTime Pgina 1 de 3

Agendando a execuo de macros com a funo


OnTime
Introduo

Uma necessidade muito comum em aplicativos utilizar critrios de tempo para execuo de
algumas rotinas. Esta uma tarefa trivial em vrias linguagens, mas poucos pensam em
utiliz-la no VBA por achar muito complexo, tendo que envolver chamadas de API e outros
recursos mais avanados da linguagem.

Porm, o VBA do Microsoft Excel disponibiliza um mtodo que facilita esse tipo de trabalho, o
mtodo OnTime().

O que

O mtodo OnTime programa um procedimento para ser executado em um momento


especificado no futuro (seja em uma determinada hora do dia ou aps uma quantidade
especfica de tempo decorrido).

A estrutura de chamada funo OnTime se faz da seguinte forma:

Application.OnTime([EarliestTime], [Procedure], [LatestTime], [Schedule])

Argumentos da funo:

EarliestTime
Variant necessrio. Especifica quando voc deseja que esse procedimento seja executado.

Procedure
String necessrio. O nome do procedimento a ser executado.

LatestTime
Variant opcional. Especifica at quando o procedimento pode ser executado. Por exemplo, se
LatestTime estiver definido como EarliestTime + 30 e o Microsoft Excel no estiver em
modo Pronto, Copiar, Recortar ou Localizar em EarliestTime devido a um outro
procedimento estar sendo executado, o Microsoft Excel esperar 30 segundos para que o
primeiro procedimento termine. Se o Microsoft Excel no estiver em modo Pronto dentro de
30 segundos, o procedimento no ser executado. Se esse argumento for omitido, o
Microsoft Excel esperar at que o procedimento possa ser executado.

Schedule
Variant opcional. True para programar um novo procedimento OnTime. False para limpar
um procedimento definido anteriormente. O valor padro True.

Exemplo

Para informar ao VBA um valor de data vlido para execuo do mtodo OnTime, usa-se a
propriedade Now do VBA juntamente com a funo TimeValue(). Somando as duas,
possvel programar o procedimento para ser executado quando uma quantidade de tempo
especfica (contando a partir de agora) tiver decorrido.

Caso seja necessrio informar uma hora especfica, por exemplo, 3 da tarde (ou 15:00), usa-
se TimeValue(time) onde time um valor de hora informado atravs de uma String.

Veja os exemplos de cdigo abaixo:

http://www.tomasvasquez.com.br/artigos/Agendando_a_execucao_de_macros_com_a_fu... 19/08/2017
Excel VBA - Agendando a execuo de macros com a funo OnTime Pgina 2 de 3

1 Public Sub ExecutaOnTime()


2 MsgBox "Opa! Executou."
3 End Sub
4
5 Public Sub TesteOnTime()
6 Call Application.OnTime(Now + TimeValue("00:00:10"),
"ExecutaOnTime")
7 End Sub

Execute a funo TesteOnTime, deixando o cursor do mouse sobre ele (linha 5 a 6) e


clicando em F5. Se tudo der certo, em 10 segundos voc dever ver esta mensagem:

Pronto! Conforme configuramos o OnTime para executar 10 segundos aps a hora atual
(linha 6) pois, Now retorna a data e hora atual e TimeValue("00:00:10") representa para o
VBA 10 segundos, aps executar a funo TesteOnTime, ela programa a funo
ExecutaOnTime (linha 1) para ser executada neste tempo.

Para efeitos de teste, configure outros valores de tempo, mas tome o cuidado que sejam
pequenos pois, se configurar para executar daqui a 24 horas ("24:00:00"), vai ter que
esperar um bom tempo.

Para fazer outro teste interessante do OnTime, mude o cdigo para ficar desta forma:

1 Public Sub ExecutaOnTime()


2 MsgBox "Opa! Executou."
3 End Sub
4
5 Public Sub TesteOnTime()
6 Call Application.OnTime(TimeValue("13:00:00"),
"ExecutaOnTime")
7 End Sub

Da forma que est, o cdigo ir configurar a funo ExecutaOnTime (linha 1) para ser
executada s na prxima 13:00 do computador em que est sendo executada. Como este
apenas um exemplo, configure uma hora que estiver mais prxima para no esperar muito.

possvel tambm cancelar a execuo de uma macro agendada com o OnTime. O exemplo
de cdigo abaixo cancela a definio de OnTime do exemplo anterior, ou seja, caso a
execuo da funo ExecutaOnTime estiver agendada, executar a funo CancelaOnTime
far com que esta programao seja cancelada. isso feito passando o valor False para o
parmetro Schedule (linha 10):

1 Public Sub ExecutaOnTime()


2 MsgBox "Opa! Executou."
3 End Sub
4
5 Public Sub TesteOnTime()
6 Call Application.OnTime(TimeValue("13:00:00"),

http://www.tomasvasquez.com.br/artigos/Agendando_a_execucao_de_macros_com_a_fu... 19/08/2017
Excel VBA - Agendando a execuo de macros com a funo OnTime Pgina 3 de 3

7 "ExecutaOnTime")
8 End Sub
9
10 Public Sub CancelaOnTime()
Call Application.OnTime(EarliestTime:=TimeValue
("13:00:00"), Procedure:="ExecutaOnTime", Schedule:=False)
11 End Sub

Concluso

Com este recurso em mos, possvel atender a algumas necessidades que no contexto do
Excel pareciam inviveis. Um exemplo tpico uma tela de aprensentao ou SplashScreen
como conhecida que apresenta o programa e fecha em alguns segundos. Este um bom
teste para experimentar o uso do OnTime. Fica a um desafio.

Toms Vsquez

Seja Magra Para Sempre!


Perca Peso 10X Mais Rpido Com FiT Turbo e Seja Muito Feliz.
www.FiT-Turbo.com

http://www.tomasvasquez.com.br/artigos/Agendando_a_execucao_de_macros_com_a_fu... 19/08/2017