Função VBA Sleep

Função Excel VBA Sleep

A função VBA Sleep é uma função do Windows presente nos arquivos DLL do Windows, que é usada para interromper ou interromper a execução do procedimento de macro por um determinado período de tempo após o qual podemos reiniciar o programa.

Existem situações em que precisamos pausar nosso processo de execução de macro para concluir outros conjuntos de tarefas. Outros conjuntos de tarefas podem ser parte de nossa codificação ou parte de outro procedimento de macro ou podem ser inseridos para a macro atual do Excel. Como você pode pausar o programa quando ele está em execução? Podemos pausar o código de procedimento por algum tempo especificado pelo usuário e após esse determinado período podemos retomar o programa. Podemos fazer isso no VBA usando a função SLEEP.

O que a função VBA Sleep faz?

SLEEP como o próprio nome diz “dormir por algum tempo”, “descansar por algum tempo”, “pausa por um tempo”, tempo desligado por algum tempo ”etc. A função dormir permite que os usuários pausem nosso código macro por milissegundos. Usando isso, podemos atrasar o processo de código de macro.

Se você acha que temos uma função interna chamada SLEEP, então você está errado porque no VBA não existe tal função, em vez disso, temos uma função chamada Sleep como uma função do Windows. Ao inserir um conjunto especial de código, podemos realmente chamar essa função no VBA. Na verdade, é uma função presente nos arquivos DLL do Windows, por isso precisamos declarar a nomenclatura da API antes do início da sub-rotina em vba.

Abaixo está o código VBA.

Código:

# If VBA7 Then Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'Para versões de 64 bits do Excel # Else Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)' Para versões de 32 bits do Excel # End If 

Copie o texto acima e cole em seu módulo antes de começar a escrever os códigos de macro. Deve ser colado assim em seu módulo.

Exemplo

Antes de mostrar a maneira de escrever o código, deixe-me falar um pouco mais sobre a função dormir. Isso atrasa o processo em milissegundos. Portanto, 1 segundo é igual a 1000 milissegundos, se você quiser fazer uma pausa de 10 segundos, deve ser 10000 milissegundos.

Você pode baixar este modelo VBA Sleep Excel aqui - Modelo VBA Sleep Excel

Exemplo 1

Depois que o código da API for colado antes do início do procedimento Sub, crie um nome de macro.

Código:

# Sub Sleep_Example1 () End Sub 

Declare duas variáveis ​​como uma string.

Código:

 Dim StartTime As String Dim EndTime As String 

Para a variável StartTime atribua o valor da função TIME. Nota: TIME na função excel retorna a hora atual.

Código:

StartTime = Time

Agora exibiremos esta mensagem na caixa de mensagem VBA.

Código:

StartTime = Hora MsgBox StartTime

Agora vamos pausar o código por 10 segundos usando a função dormir. Como eu disse, ele pausa o código em milissegundos, então para pausar por 10 segundos, precisamos usar 10.000 milissegundos.

Código:

 Sub Sleep_Example1 () Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox StartTime Sleep (10000) End Sub 

Agora use a segunda variável EndTime e atribua a hora atual.

Código:

 Sub Sleep_Example1 () Dim StartTime As String Dim EndTime As String StartTime = Hora MsgBox StartTime Sleep (10000) EndTime = Hora MsgBox EndTime End Sub 

Agora, duas variáveis StartTime e EndTime manterão o horário de início e término da macro. Execute esta macro, primeiro veremos a hora de início da macro, ou seja, a hora atual em seu sistema.

Clique em OK, ele vai dormir por 10 segundos. Você pode ver o símbolo do buffer.

Após 10 segundos, ele começará a retomar o código, então, ele mostrará a hora de término, ou seja, após esperar por 10 segundos, qual é a hora atual agora.

Agora você pode ver a macro iniciada às 10:54:14 e terminada às 10:54:24, ou seja, exatamente a diferença de 10 segundos está lá. Nesses 10 segundos, o VBA pausa a execução do código.

Exemplo # 2 - Função dormir em loops

Sleep é melhor usado com loops em VBA. Por exemplo, quero inserir números de série de 1 a 10 usando Do while loop no VBA.

Depois de inserir o número um, meu código deve aguardar 3 segundos, portanto, quando o loop for executado por 10 vezes, deverá ser 30 segundos no total.

Código:

 Sub Sleep_Example2 () Dim k As Integer k = 1 Do While k <= 10 Células (k, 1) .Value = kk = k + 1 Sleep (3000) '1000 milissegundos é 1 segundo então 3000 é igual a 3 segundos Loop End Sub 

Execute este código e você terá que esperar pelo menos 30 segundos para concluir o processo.

Para rastrear o tempo exato, use o código abaixo.

Código:

 Sub Sleep_Example2 () Dim k As Integer Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox "Seu código começou em" & StartTime k = 1 Do While k <= 10 Cells (k, 1) .Value = kk = k + 1 Sleep (3000) '1000 milissegundos é 1 segundo então 3000 é igual a 3 segundos Loop EndTime = Time MsgBox "Your Code Ended at" & EndTime End Sub 

Este código mostrará 2 caixas de mensagem, a primeira mostrará a hora de início e a segunda mostrará a hora de término.

Nota: Ao executar este código, você não pode usar o Excel, mesmo a tecla Escape não funcionará.