VBA – Funções Wait e Sleep – Código VBA de Pausa/Atraso

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on May 26, 2023

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.

vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA