Est-il équivalent à enfiler.Sleep() in VBA
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
une Autre façon sans l'aide de 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 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
- 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.
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()))
Si vous utilisez Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
, vous pouvez obtenir cette erreur dans un module objet.
Si oui, vous pouvez la déclarer comme privé:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
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 :)