VBA – Funções Wait e Sleep – Código VBA de Pausa/Atraso
In this Article
Este tutorial demonstrará como pausar/atrasar o código usando as funções Wait e Sleep no VBA.
Quando criamos programas VBA grandes que executam muitos cálculos ou talvez até chamem um programa externo para ser executado, podemos exigir que nosso código VBA pare de ser executado por um período de tempo específico enquanto o processo externo estiver ocorrendo. O VBA tem alguns métodos disponíveis para conseguir isso.
Uso do Método Application.Wait
Se precisarmos pausar a execução de nossa macro por algum tempo ou até que um tempo específico seja atingido antes de executar a próxima etapa, poderemos usar o método Application.Wait. Isso pode ser útil, por exemplo, se tivermos automatizado um processo de login em um site e precisarmos aguardar alguns segundos até que a página seja carregada antes que a macro continue em execução.
Esperar 1 Segundo
Ao incluir esta linha abaixo em sua macro, a execução será pausada por aproximadamente 1 segundo:
Application.Wait (Now + TimeValue("0:00:01"))
Esperar Até (Um Horário Específico)
Em alguns casos, você precisará esperar até um horário específico. Com essa linha abaixo, sua macro não prosseguirá antes das 9h:
Application.Wait "09:00:00"
Observe que o Application.Wait não aceita atrasos inferiores a 1 segundo.
Uso do Método Sleep
Se precisar de uma maneira mais precisa de pausar a macro, você poderá usar o método Sleep.
Sleep é uma função da API do Windows, ou seja, não faz parte do VBA. Ele pode ser acessado por meio de uma instrução de declaração especial.
Se estiver usando a versão de 64 bits do Microsoft Office, insira a seguinte declaração em um novo módulo ou no início do módulo (não diretamente na subrotina) em que deseja usar a função Sleep:
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)
Na versão de 32 bits, use esta linha:
Public Declare Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)
Depois de declarar a função Sleep, você tem acesso a ela em suas sub-rotinas, assim:
Sleep 10000
Com essa linha acima, sua macro será pausada por 10.000 milissegundos, ou seja, 10 segundos.
Uso de um Loop com Eventos Do
A grande desvantagem de usar os métodos Wait e Sleep é que o usuário não pode fazer nada no Excel enquanto espera que a macro continue. Um usuário poderia pensar que o Excel parou de responder e, embora possa usar Ctl+Break para interromper a macro, isso anula o objetivo de colocar uma pausa na macro para começar.
Para superar esse problema, podemos usar um loop com um método chamado DoEvents.
Public Sub Test()
Dim i As Long
For i = 1 To 20000
Range(“A1”).Value = i
DoEvents
Next i
End Sub
Agora, enquanto o Excel está executando a macro acima, o usuário pode continuar a interagir com o Excel – podemos alterar as guias ou formatar células, por exemplo – basicamente, a macro continua a ser executada, mas a tela do Excel não está congelada. Poderíamos usar um loop semelhante para criar uma função de cronômetro no Excel e incorporar o método DoEvents para descongelar a tela enquanto o cronômetro estiver em execução.