Professional Documents
Culture Documents
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
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.
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
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:
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):
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
http://www.tomasvasquez.com.br/artigos/Agendando_a_execucao_de_macros_com_a_fu... 19/08/2017