Existe-t-il un équivalent à Thread.Sleep()
dans Access VBA?
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
Une autre façon sans utiliser kernel32:
Dim started As Single: started = Timer
Do: DoEvents: Loop Until Timer - started >= 1
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
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
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
.
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()))
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 :)