Aula rápida de VBA que vai ajudar muita gente: ciclos de tempo em VBA.

Vamos ver como fazer uma macro executar por tempo determinado após ser executada, e, como executar a macro automaticamente a cada X tempo. 

Para essas e outras dicas de VBA não deixe de conferir nosso curso gratuito de Visual Basic Application

Executando por tempo determinado

Esse código foi utilizado, por exemplo, na nossa aula de como criar uma tela de boas-vindas. No exemplo configuramos para que a tela ficasse visível por 2 segundos e depois fechasse. Ou seja, em termos de código estamos dizendo para o Excel executar algum código por X tempo e depois matar o processo.

O código é muito simples, confira: 

Application.OnTime Now + TimeValue("00:00:02"), "FechaForm"

Note que o TimeValue funciona da seguinte forma: "hora: minutos: segundos". Portando se você quiser executar por 1 minuto é só configurar para ("00:01:00"). Fácil, certo?

Veja que para tudo funcionar corretamente o seu código deverá possuir obrigatoriamente o módulo FechaForm. Se você não sabe como criar um módulo confira aqui. O código a ser inserido noeste módulo é

Sub FechaForm()
      unload UserForm1
End Sub

Repare "UserForm1" é o nome da rotina que será "morta" após os 5 segundos. Ou seja, se a sua rotina se chamar "Minha_rotina", a linha será "unload Minha_rotina".

Repetir a cada X segundos

Uma outra aplicação que você pode dar à função OnTime é fazer com que uma rotina seja executada a cada tempo específico, por exemplo a cada 1 minuto.

Isso será muito útil para uma planilha que contenha dados importantes e que, por isso, você quer que os dados sejam salvos a cada minuto e de forma automática. Dessa forma é só usar uma macro que salva automaticamente e configurar para ela executar a cada 60 segundos.

Crie um módulo na sua planilha e cole o seguinte código

Sub gravar() 'Se a sua rotina tiver outro nome aqui
     Aqui você insere o seu código que faz a gravação ou qualquer outro que quiser
     Call timer
End Sub

Sub timer()
     Application.OnTime Now + TimeValue("00:01:00"), "gravar" 'não esqueça de editar aqui
End Sub  

Repare que as regras das horas, minutos e segundos é a mesma de antes.

Se você quiser ver um exemplo rodando a cada 5 segundos só para comprovar a eficiência do seu código, cole em um módulo as instruções

Sub gravar() 'Se a sua rotina tiver outro nome aqui
    MsgBox "Funcionou =)"
    Call timer
End Sub

Sub timer()
    Application.OnTime Now + TimeValue("00:00:05"), "gravar" 'não esqueça de editar aqui
End Sub

Essas são apenas algumas das utilidades do recurso .onTime e se você resolver explorá-lo mais a fundo verá que as opções são ilimitadas.