Ich habe ein Excel-Arbeitsblatt mit dem folgenden Makro. Ich würde es gerne jede Sekunde wiederholen, aber es ist schwierig, wenn ich die Funktion dafür finde. Ist das nicht möglich
Sub Macro1()
'
' Macro1 Macro
'
Do
Calculate
'Here I want to wait for one second
Loop
End Sub
DoEvents
wie hier gezeigt. Dailydoseofexcel.com/archives/2005/06/14/stopwatchApplication.Wait(Now + #0:00:01#)
Prost!Application.Wait (Now + TimeValue("0:00:01"))
Application.wait(now + 1e-5)
für eine Sekunde,Application.wait(now + 0.5e-5)
für eine halbe Sekunde usw.Fügen Sie dies Ihrem Modul hinzu
Oder verwenden Sie für 64-Bit-Systeme:
Nennen Sie es in Ihrem Makro wie folgt:
quelle
Sleep()
Sie Wartezeiten von weniger als 1 Sekunde angeben können.Application.Wait
ist manchmal zu körnig.Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
anstatt zu verwenden:
ich bevorzuge:
weil es danach viel einfacher zu lesen ist.
quelle
Das funktioniert einwandfrei für mich. Fügen Sie einen beliebigen Code vor oder nach der "do till" -Schleife ein. Fügen Sie in Ihrem Fall die 5 Zeilen (time1 = & time2 = & "do till" -Schleife) am Ende Ihrer do-Schleife ein
quelle
Timer
da derTimer
Ansatz kurz vor Mitternacht fehlschlägt.Die Deklaration für Sleep in kernel32.dll funktioniert in 64-Bit-Excel nicht. Dies wäre etwas allgemeiner:
quelle
Nur eine bereinigte Version von Clemos Code - funktioniert in Access, das nicht über die Application.Wait-Funktion verfügt.
quelle
Timer
die Anzahl der Sekunden seit Mitternacht angegeben wird, schlägt dieser Ansatz fehl, wenn er kurz vor Mitternacht ausgeführt wird (dhsngEnd
> = 86.400).Timer
Wird um Mitternacht auf 0 zurückgesetzt und bleibt somit weniger alssngEnd
für immer.Die meisten der vorgestellten Lösungen verwenden Application.Wait, das die Zeit (Millisekunden) nicht berücksichtigt, die bereits seit Beginn der aktuellen Sekundenzählung verstrichen ist, sodass sie eine intrinsische Ungenauigkeit von bis zu 1 Sekunde aufweisen .
Der Timer-Ansatz ist die beste Lösung , aber Sie müssen das Zurücksetzen um Mitternacht berücksichtigen. Hier ist eine sehr genaue Schlafmethode mit Timer:
VERWENDEN SIE DIESES, UM JEDE SCHLAFFUNKTION ZU TESTEN: (Debug öffnen Sofortiges Fenster: STRG + G)
quelle
Application.Wait Second(Now) + 1
quelle
quelle
Hier ist eine Alternative zum Schlafen:
Im folgenden Code lasse ich einen "Glow" -Effekt auf einer Drehschaltfläche blinken, um Benutzer darauf hinzuweisen, wenn sie "Probleme" haben. Die Verwendung von "sleep 1000" in der Schleife führte zu keinem sichtbaren Blinken, aber die Schleife funktioniert hervorragend.
quelle
Ich ließ dies machen, um das Problem zu beantworten:
quelle
Normalerweise verwende ich die Timer- Funktion, um die Anwendung anzuhalten . Fügen Sie diesen Code in Ihren ein
quelle
Timer
die Anzahl der Sekunden seit Mitternacht angegeben wird, schlägt dieser Ansatz fehl, wenn er kurz vor Mitternacht ausgeführt wird (dhT0
weniger als die Anzahl der Verzögerungssekunden ab Mitternacht).Timer
Wird um Mitternacht auf 0 zurückgesetzt, bevor das Verzögerungslimit erreicht ist.Delay
erreicht nie die Verzögerungsgrenze, daher läuft die Schleife für immer.Loop Until Delay >= 1
, da sonst die Gefahr besteht, dass Sie über 1 hinausgehen und die Schleife niemals verlassen.Wait and Sleep-Funktionen sperren Excel und Sie können nichts anderes tun, bis die Verzögerung beendet ist. Auf der anderen Seite geben Ihnen Loop-Verzögerungen keine genaue Wartezeit.
Also habe ich diese Problemumgehung gemacht, um ein wenig von beiden Konzepten zu verbinden. Es wird so lange wiederholt, bis die gewünschte Zeit erreicht ist.
Sie müssen nur Waste10Sec anrufen, wo Sie die Verzögerung benötigen
quelle
Versuche dies :
quelle
Sie können Application.wait now + timevalue ("00:00:01") oder Application.wait now + timeserial (0,0,1) verwenden.
quelle