Gibt es ein Äquivalent zu Thread.Sleep()
in Access VBA?Gibt es ein Äquivalent zu Thread.Sleep() in VBA
Antwort
Declare Sub Sleep Lib "kernel32" Alias "Sleep" _
(ByVal dwMilliseconds As Long)
Verwenden Sie die folgende Syntax, um die Sleep-Funktion aufzurufen:
Sub Sleep()
Sleep 1000 'Implements a 1 second delay
End Sub
Ahh hat gerade das selbst gefunden. Vielen Dank! –
Ich sollte beachten, dass ich in Excel 2007 Sleep direkt ohne Wrapper VBA Sub aufrufen kann. –
Die Declare-Anweisung sollte sich in einem Modul befinden, um zu vermeiden, dass "Anweisungen deklarieren als öffentliche Mitglieder des Objekts nicht zulässig sind". – HuckIt
Ein paar Änderungen zu arbeiten, um den Code zu bekommen benötigt. Der folgende Code ist die korrigierte Version.
Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
Sub SleepVBA()
Sleep 1000 'Implements a 1 second delay
End Sub
Ein anderer Weg, ohne kernel32 mit:
Dim started As Single: started = Timer
Do: DoEvents: Loop Until Timer - started >= 1
Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
irgendwie erstellt zusätzliche Probleme irgendwo anders in meinem Code hinzufügen. I beendet diese Funktion nach oben mit, dass ich auf einem anderen Forum gefunden und tweeked ein bisschen:
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
hoffe, das hilft :)
Der einzige Grund, warum ich mir vorstellen kann, dass das Hinzufügen des Funktionskopfs "Probleme" verursachen würde, wenn Sie den Funktionsnamen "Sleep" in einem Modul oder einer Klasse im aktuellen Prozess bereits verwenden würden. –
ich dies in Excel verwenden und es funktioniert super:
Application.Wait DateAdd("s", 1, Now())
DateAdd() ist eine Funktion, die eine Zeit relativ zu Now()
setzt (in diesem Fall können Sie andere Werte als Argument verwenden), "s"
ist das Zeitmaß (Sekunden in diesem Fall), und das Inkrement ist 1. So Hier teilt der Funktionsaufruf der App mit 1 Sekunde warten.
See also for more detail about the use of the DateAdd
function.
Der ganze Rest der Methoden Excel in Excel immer vollständig unempfänglich Folge warten zu machen. Die Lösung, um Excel warten zu lassen, während eine reaktionsfähige Benutzeroberfläche sichergestellt wird, besteht darin, dieses Warte-Sub mit der Anzahl von Sekunden zu warten, die gewartet werden soll.
Sub Wait(seconds As Integer)
Dim now As Long
now = Timer()
Do
DoEvents
Loop While (Timer < now + seconds)
End Sub
Das Problem bei der Verwendung dieser Methode ist, dass DoEvents fast die gesamte CPU-Zeit verbraucht. – phrebh
Es ist möglich, die Excel Wait() - Prozedur von Access VBA zu verwenden.
Der erste Schritt besteht darin, sicherzustellen, dass die Excel-Bibliothek von Ihrem Projekt referenziert wird.
Wenn dass der folgende Code getan wird für 10 Sekunden warten, arbeiten:
Call Excel.Application.Wait(Time:=DateAdd("s",10,Now()))
Dies ist eine Access-FAQ ist, und Sie werden http://mvps.org/Access/ zu finden sein eine wichtige Quelle für Antworten auf FAQs. –