Verwenden eines Timers in MS Office VBA-Makros

click fraud protection

Für diejenigen von uns, die tief im Kopf sind VB.NET, die Reise zurück nach VB6 kann eine verwirrende Reise sein. Die Verwendung eines Timers in VB6 ist so. Gleichzeitig ist das Hinzufügen zeitgesteuerter Prozesse zu Ihrem Code für neue Benutzer von VBA-Makros nicht offensichtlich.

Timer für Neulinge

Codierung Ein Word-VBA-Makro zum automatischen Timing eines in Word geschriebenen Tests ist ein typischer Grund für die Verwendung eines Timers. Ein weiterer häufiger Grund ist, zu sehen, wie viel Zeit verschiedene Teile Ihres Codes in Anspruch nehmen, damit Sie an der Optimierung der langsamen Abschnitte arbeiten können. Manchmal möchten Sie vielleicht sehen, ob in der Anwendung etwas passiert, wenn der Computer nur im Leerlauf zu sitzen scheint, was ein Sicherheitsproblem sein kann. Timer können das.

Starten Sie einen Timer

Sie starten einen Timer, indem Sie eine OnTime-Anweisung codieren. Diese Anweisung ist in Word und Excel implementiert, hat jedoch je nach verwendeter Syntax eine andere Syntax. Die Syntax für Word lautet:

instagram viewer

Ausdruck. OnTime (Wann, Name, Toleranz)

Die Syntax für Excel sieht folgendermaßen aus:

Ausdruck. OnTime (Früheste Zeit, Prozedur, Neueste Zeit, Zeitplan)

Beide haben den ersten und den zweiten Parameter gemeinsam. Der zweite Parameter ist der Name eines anderen Makros, das ausgeführt wird, wenn die Zeit im ersten Parameter erreicht ist. Das Codieren dieser Anweisung ähnelt dem Erstellen einer Ereignisunterroutine in VB6- oder VB.NET-Begriffen. Das Ereignis erreicht die Zeit im ersten Parameter. Die Ereignisunterroutine ist der zweite Parameter.

Dies unterscheidet sich von der Codierung in VB6 oder VB.NET. Zum einen kann sich das im zweiten Parameter genannte Makro in einem beliebigen Code befinden, auf den zugegriffen werden kann. In einem Word-Dokument empfiehlt Microsoft, es in die normale Dokumentvorlage aufzunehmen. Wenn Sie es in ein anderes Modul einfügen, empfiehlt Microsoft, den vollständigen Pfad zu verwenden: Projekt. Modul. Makro.

Der Ausdruck ist normalerweise das Anwendungsobjekt. In der Word- und Excel-Dokumentation heißt es, dass der dritte Parameter die Ausführung des Ereignismakros abbrechen kann, falls ein Dialogfeld oder ein anderer Prozess die Ausführung innerhalb einer bestimmten Zeit verhindert. In Excel können Sie in diesem Fall eine neue Zeit festlegen.

Codieren Sie das Zeitereignismakro

Dieser Code in Word richtet sich an den Administrator, der eine Benachrichtigung anzeigen möchte, dass die Testzeit abgelaufen ist, und das Testergebnis drucken möchte.

Public Sub TestOnTime ()
Debuggen. Drucken "Der Alarm wird in 10 Sekunden ausgelöst!"
Debuggen. Drucken ("Before OnTime:" & Now)
alertTime = Now + TimeValue ("00:00:10")
Anwendung. OnTime alertTime, "EventMacro"
Debuggen. Drucken ("After OnTime:" & Now)
End Sub
Sub EventMacro ()
Debuggen. Drucken ("Ausführen eines Ereignismakros:" & Jetzt)
End Sub

Daraus ergibt sich im unmittelbaren Fenster folgender Inhalt:

Der Alarm ertönt in 10 Sekunden!
Vor OnTime: 25.12.2000 19:41:23 Uhr
Nach OnTime: 25.12.2000 19:41:23 Uhr
Ausführen des Ereignismakros: 27.02.2010 19:41:33 Uhr

Option für andere Office-Apps

Andere Office-Anwendungen implementieren OnTime nicht. Für diese haben Sie mehrere Möglichkeiten. Erstens können Sie die Timer-Funktion verwenden, die einfach die Anzahl der Sekunden seit Mitternacht auf Ihrem PC zurückgibt und Ihre eigenen Berechnungen durchführt, oder Sie können Windows-API-Aufrufe verwenden. Die Verwendung von Windows-API-Aufrufen hat den Vorteil, dass sie präziser sind als der Timer. Hier ist eine von Microsoft vorgeschlagene Routine, die den Trick macht:

Private Deklarationsfunktion getFrequency Lib "kernel32" _
Alias ​​"QueryPerformanceFrequency" (cyFrequency As Currency) Solange
Private Deklarationsfunktion getTickCount Lib "kernel32" _
Alias ​​"QueryPerformanceCounter" (cyTickCount als Währung) Solange
Sub TestTimeAPICalls ()
Dim dTime As Double
dTime = MicroTimer
Startzeit als Single dimmen
StartTime = Timer
Für i = 1 bis 10000000
Dim j As Double
j = Sqr (i)
Nächster
Debuggen. Drucken ("MicroTimer Zeitaufwand war:" & MicroTimer - dTime)
End Sub
Funktion MicroTimer () als Double
'
'Gibt Sekunden zurück.
'
Dim cyTicks1 als Währung
Statische Frequenz als Währung
'
MicroTimer = 0
'Holen Sie sich Frequenz.
Wenn cyFrequency = 0 ist, dann getFrequency cyFrequency
'Zecken bekommen.
getTickCount cyTicks1
'Sekunden
Wenn cyFrequency, dann ist MicroTimer = cyTicks1 / cyFrequency
Endfunktion

instagram story viewer