web-dev-qa-db-fra.com

Existe-t-il un équivalent à Thread.Sleep () dans VBA

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

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

Utilisez la syntaxe suivante pour appeler la fonction Veille:

Sub Sleep()
Sleep 1000 'Implements a 1 second delay
End Sub 
62
Otávio Décio

Une autre façon sans utiliser kernel32:

Dim started As Single: started = Timer

Do: DoEvents: Loop Until Timer - started >= 1
8
DontFretBrett

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
Zorba Eisenhower

Toutes les autres méthodes permettant de faire attendre Excel entraînent la non-réponse d'Excel. La solution pour faire attendre Excel tout en garantissant une interface utilisateur réactive est d'appeler cette attente Sub 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
The Data Brewer

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 le déclarer privé:

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

2
Tony L.

J'utilise ceci dans Excel et cela fonctionne très bien:

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

DateAdd () est une fonction qui définit une heure, par rapport à Now() (dans ce cas - vous pouvez utiliser d'autres valeurs comme argument), "s" Est la mesure de temps (secondes dans ce cas ), et l'incrément est 1. Donc ici, l'appel de fonction indique à l'application d'attendre 1 seconde.

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

2
Gaffi

Il est possible d'utiliser la procédure Excel Wait () à partir d'Access VBA.

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

Une fois cela fait, le code suivant fonctionnera pour attendre dix secondes:

Call Excel.Application.Wait(Time:=DateAdd("s",10,Now()))
2
user3298002

Ajouter

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

en quelque sorte créé des problèmes supplémentaires ailleurs dans mon code. J'ai fini par utiliser cette fonction que j'ai trouvée sur un autre forum et j'ai tweeté 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

j'espère que cela t'aides :)

1
sebastien leblanc