Est-il équivalent à enfiler.Sleep() in VBA

y a-t-il un équivalent à Thread.Sleep() dans Access VBA?

40
demandé sur Johnno Nolan 2009-01-22 17:32:46

8 réponses

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

Utilisez la syntaxe suivante pour appeler la fonction de Veille:

Sub Sleep()
Sleep 1000 'Implements a 1 second delay
End Sub 
60
répondu Otávio Décio 2011-10-18 13:42:41

une Autre façon sans l'aide de kernel32:

Dim started As Single: started = Timer

Do: DoEvents: Loop Until Timer - started >= 1
8
répondu DontFretBrett 2011-10-17 23:27:59

quelques modifications sont nécessaires pour que le code fonctionne. Le code ci-dessous est la version corrigée.

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

Sub SleepVBA() 
Sleep 1000 'Implements a 1 second delay 
End Sub 
6
répondu Zorba Eisenhower 2011-11-19 12:12:56

toutes les autres méthodes pour rendre Excel wait résultat dans Excel devenir complètement inactif. La solution pour faire attendre Excel tout en assurant un UI responsive est d'appeler ce sous-marin d'attente avec le nombre de secondes à attendre.

    Sub Wait(seconds As Integer)
      Dim now As Long
      now = Timer()
      Do
          DoEvents
      Loop While (Timer < now + seconds)
    End Sub
5
répondu The Data Brewer 2014-01-16 18:59:51

- je l'utiliser dans Excel et il fonctionne très bien:

Application.Wait DateAdd("s", 1, Now())

DateAdd () est une fonction qui définit un temps, relatif à Now() (dans ce cas vous pouvez utiliser d'autres valeurs que votre argument), "s" est la mesure de temps (secondes, dans ce cas), et l'incrément est 1. Donc ici, l'appel de fonction dit à l'application d'attendre 1 seconde.

Voir aussi pour plus de détails sur l'utilisation de l' DateAdd fonction.

2
répondu Gaffi 2012-04-10 16:07:09

il est possible d'utiliser la procédure Excel Wait() à partir de L'accès VBA.

la première étape est de s'assurer que la bibliothèque Excel est référencée à partir de votre projet.

quand ce sera fait, le code suivant fonctionnera pour attendre dix secondes :

Call Excel.Application.Wait(Time:=DateAdd("s",10,Now()))
2
répondu user3298002 2014-02-11 16:36:36

Si vous utilisez Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long), vous pouvez obtenir cette erreur dans un module objet.

enter image description here

Si oui, vous pouvez la déclarer comme privé:

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

2
répondu Tony L. 2016-12-01 16:18:00

Ajout

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

d'une façon ou d'une autre créé des problèmes supplémentaires ailleurs dans mon code. J'ai fini par utiliser cette fonction que j'ai trouvé sur un autre forum et tweeked un peu:

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

espérons que cela aide :)

1
répondu sebastien leblanc 2011-10-20 17:57:42