Wer VBA-Code optimieren möchte, braucht eine zuverlässige Methode zur Zeitmessung. Die VBA-Funktion Timer() liefert die verstrichenen Sekunden seit Mitternacht – und damit ein einfaches, aber wirkungsvolles Werkzeug, um die Laufzeit von Prozeduren zu messen und verschiedene Implementierungen zu vergleichen. In diesem Artikel zeigen wir, wie Du Timer() gezielt einsetzt und die Ergebnisse sinnvoll auswertest.
Beispieldatenbank
Die Beispieldatenbank zu diesem Artikel trägt den Namen Timer.accdb. Sie enthält ein Modul namens mdlTimer mit allen Prozeduren und Funktionen aus diesem Artikel sowie eine Tabelle namens tblTestdaten mit Testdatensätzen für die Performance-Vergleiche.
Die Timer()-Funktion
Die VBA-Funktion Timer() gibt einen Single-Wert zurück: die Anzahl der Sekunden seit Mitternacht. Auf Windows-Systemen liegt die Auflösung bei etwa zehn Millisekunden, was für die meisten Messungen ausreicht.
Die einfachste Art, eine Laufzeit zu messen, kommt ohne jede Hilfsfunktion aus. Man speichert den Wert von Timer() vor dem Code, führt den Code aus und gibt die Differenz danach direkt aus:
Dim sngStart As Single sngStart = Timer() 'Hier kommt der zu messende Code Debug.Print "Dauer: " & Timer() - sngStart
Das genügt für schnelle Stichproben im Direktbereich, aber auch, wenn man mal eben prüfen will, welche Prozedur im Ablauf etwa beim Öffnen eines Formulars wie viel Zeit in Anspruch nimmt.
Dann könnte man jede betroffene Prozedur mit diesen Anweisungen versehen – das Speichern des Ergebnisses von Timer() bei Start landet gleich mit der ersten Anweisung in sngTimer, und am Ende der Prozedur lassen wir das Ergebnis ausgeben, dann mit Angabe des Prozedurnamens.
So landen alle Ergebnisse übersichtlich im Direktbereich, wenn alle Prozeduren des Formulars ausgeführt worden sind. Außerdem kann man sich so einen Überblick verschaffen, welche Prozeduren überhaupt an einem solchen Vorgang beteiligt sind.
Der Sonderfall Mitternacht
Timer() setzt seinen Wert um Mitternacht auf null zurück. Läuft eine Messung über diesen Zeitpunkt hinweg, ergibt die Subtraktion einen negativen Wert. In der Praxis betrifft das nur sehr lang laufende Prozeduren. Wer auf Nummer sicher gehen will, prüft das Ergebnis auf ein negatives Vorzeichen und addiert dann 86400 (Sekunden pro Tag). Die Hilfsfunktion in Listing 2 erledigt das:
Public Function TimerDauer(sngStart As Single) _ As Single Dim sngDauer As Single sngDauer = Timer() - sngStart If sngDauer < 0 Then sngDauer = sngDauer + 86400 End If TimerDauer = sngDauer End Function
Zwei Varianten vergleichen
Unser exklusives Angebot für Dich!
(Gilt für den Abschluss eines Jahres-Abonnements.)
Hier geht’s weiter →Die ersten 4 Wochen kostenlos testen – voller Zugriff auf alle Artikel, vollständigen Code und Beispieldatenbanken. Kein Risiko: Wenn es nicht passt, kündigst Du einfach innerhalb der ersten vier Wochen.
Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?
Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?
In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.
Jetzt kostenloses Access-Audit anfordern →