Função de suspensão do Excel VBA para pausar seu código de macro

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 um determinado período de tempo em que podemos retomar 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 dados de entrada para a macro atual do Excel. Como você pode pausar o programa durante a 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 já diz, "durma por algum tempo", "descanse por algum tempo", "pause por um tempo", tire uma folga por algum tempo, "etc … A função de sono 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 incorporada chamada SLEEP, você está errado porque, no VBA, essa função não existe. Em vez disso, temos uma função chamada Sleep como uma função do Windows. Ao inserir um conjunto especial de códigos, 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.

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 essa 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, para fazer uma pausa de 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 conterão o horário de início e término da macro. Execute esta macro; a princípio, veremos a hora de início da macro, ou seja, a hora atual do seu sistema.

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

After 10 seconds, it will start to resume the code so it will show the end time, i.e., after waiting for 10 seconds, what’s the current time now.

Now you can see macro started at 10:54:14 and ended at 10:54:24, i.e., Exactly the 10-second difference is there. In those 10 seconds, VBA pause the code running.

Example #2 - Sleep Function in Loops

Sleep is best used with loops in VBA. For example, I want to insert serial numbers from 1 to 10 using Do while loop in VBA.

After inserting the one number, my code should wait for 3 seconds, so when the loop runs 10 times, it should be 30 seconds in total.

Code:

Sub Sleep_Example2() Dim k As Integer k = 1 Do While k <= 10 Cells(k, 1).Value = k k = k + 1 Sleep (3000) '1000 milliseconds is 1 second so 3000 is equal to 3 seconds 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 "Seu código terminou em" & 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 chave de escape não funcionará.

Artigos interessantes...