Pergunta

Existe um equivalente para Thread.Sleep() no Access VBA?

Foi útil?

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()))

Se você usar Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long), você pode obter este erro em um módulo de objeto.

enter descrição da imagem aqui

Se assim for, você pode declará-lo como privado:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

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:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top