Existe um equivalente para Thread.Sleep () em VBA
-
19-08-2019 - |
Pergunta
Existe um equivalente para Thread.Sleep()
no Access VBA?
Solução
Declare Sub Sleep Lib "kernel32" Alias "Sleep" _
(ByVal dwMilliseconds As Long)
Use a seguinte sintaxe para chamar a função do sono:
Sub Sleep()
Sleep 1000 'Implements a 1 second delay
End Sub
Outras dicas
Outra forma sem usar kernel32:
Dim started As Single: started = Timer
Do: DoEvents: Loop Until Timer - started >= 1
Um par de alterações são necessárias para obter o código de trabalho. O código abaixo é a versão corrigida.
Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
Sub SleepVBA()
Sleep 1000 'Implements a 1 second delay
End Sub
Todo o resto dos métodos de fazer resultado espera Excel no Excel tornando-se completamente indiferente. A solução para tornar espera Excel, assegurando uma interface sensível é chamar esta espera Sub com o número de segundos de espera.
Sub Wait(seconds As Integer)
Dim now As Long
now = Timer()
Do
DoEvents
Loop While (Timer < now + seconds)
End Sub
Eu uso isso no Excel e ele funciona muito bem:
Application.Wait DateAdd("s", 1, Now())
DateAdd () é uma função que definir um tempo, em relação ao Now()
(neste caso - você pode usar outros valores como o seu argumento), "s"
é a medida do tempo (segundos, neste caso), e o incremento é de 1. Então, aqui, a chamada de função está dizendo a aplicação de esperar 1 segundo.
Veja também para mais detalhes sobre o uso da função DateAdd
.
É possível utilizar o procedimento Wait Excel () a partir do Access VBA.
O primeiro passo é garantir que a biblioteca Excel é referenciado a partir de seu projeto.
Quando isso é feito o seguinte código irá trabalhar para esperar dez segundos:
Call Excel.Application.Wait(Time:=DateAdd("s",10,Now()))
Adicionando
Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
de alguma forma criou problemas adicionais em outro lugar no meu código. Acabei usando essa função que eu encontrei em um outro fórum e tweeked um pouco:
Function WaitTime(n As Double)
'Function that wait an amount of time n in seconds
TWait = Time
TWait = DateAdd("s", n, TWait)
Do Until TNow >= TWait
TNow = Time
Loop
End Function
espero que isso ajude:)