Formular-Timer in Access mit VBA

Formular-Timer in Access können ganz unterschiedliche Aufgaben übernehmen. Die beiden Hauptkategorien sind Benutzerinteraktion und das Umgehen von Einschränkungen durch das System. Bei der Benutzerinteraktion geht es darum, in den gewünschten Zeitintervallen Meldungen anzuzeigen, Informationen abzufragen et cetera. Bei den Systemeinschränkungen haben wir es mit Herausforderungen zu tun, bei denen wir zuerst eine asynchrone Aktion auslösen, die Daten für eine weitere Aktion liefern soll. Diese wird dann aber zu schnell ausgeführt, als dass die Daten bereits vorhanden sind. In diesem Fall können wir mit der asynchronen Aktion einen Formular-Timer starten, der die folgende Aktion erst nach einem ausreichend großen Zeitintervall auslöst, sodass alle Aktionen die notwendigen Daten zur Verfügung haben. In diesem Artikel zeigen wir, wie ein Formular-Timer genau mit VBA programmiert wird: Wie wir das Zeitintervall festlegen, wie wir diesen starten und auch, wie wir ihn nach der Erledigung wieder ausschalten.

Grundlagen zum Formular-Timer

Der Formular-Timer von Access basiert auf den beiden Eigenschaften TimerInterval und OnTimer. Mit TimerInterval legen wir fest, in welchen Zeitintervallen das Ereignis OnTimer ausgelöst wird. Der Wert für TimerInterval wird in Millisekunden angegeben.

Wenn wir also wollen, dass das Timer-Ereignis alle fünf Sekunden ausgelöst wird, setzt Du TimerInterval auf 5000. Das Ereignis OnTimer enthält dann den VBA-Code, der bei jedem Intervall ausgeführt werden soll.

Timer über die Eigenschaften einstellen

Die Eigenschaften TimerInterval und OnTimer können wir entweder direkt im Eigenschaftenblatt des Formulars einstellen oder per VBA zur Laufzeit setzen. Im Eigenschaftenblatt geben wir bei Zeitgeberintervall die Millisekunden an und bei Bei Zeitgeber wählen wir den Eintrag [Ereignisprozedur] aus (siehe Bild 1).

Einstellungen für einen Formular-Timer

Bild 1: Einstellungen für einen Formular-Timer

Beim Einstellen der Eigenschaft Zeitgeberintervall haben wir gesehen, dass diese standardmäßig den Wert 0 enthält. Das bedeutet, dass der Zeitgeber nicht ausgelöst wird.

Nun klicken wir für die Eigenschaft Bei Zeitgeber die Schaltfläche mit den drei Punkten an. Im nun erscheinenden VBA-Editor fügen wir in diese Prozedur die folgenden Anweisungen ein:

Private Sub Form_Timer()
     i = i + 1
     Me.Caption = "Zähler Zeitgeber: " & i
End Sub

Die Variable i deklarieren wir ebenfalls in diesem Klassenmodul:

Dim i As Long

Wenn wir dieses Formular nun öffnen, erhalten wir in der Titelleiste jede Sekunde ein Update mit dem jeweiligen Wert der Variablen i (siehe Bild 2).

Formular mit Timer

Bild 2: Formular mit Timer

Timer per VBA starten und stoppen

Wenn Sie den Timer per VBA steuern möchten, können Sie die Eigenschaft TimerInterval direkt zur Laufzeit festlegen. Möchtest Du den Timer stoppen, setzt Du TimerInterval einfach auf 0.

Um ihn wieder zu starten, können wir die Eigenschaft TimerInterval einfach wieder auf den gewünschten Wert in Millisekunden einstellen.

Wir wollen dies mit zwei Schaltflächen erledigen. Die erste Schaltfläche heißt cmdTimerStoppen und soll den Timer anhalten. Die zweite heißt cmdTimerFortsetzen und soll den Timer wieder starten.

Für das Ereignis Beim Klicken dieser Schaltflächen hinterlegen wir jeweils eine Ereignisprozedur.

Die Ereignisprozedur für cmdTimerStoppen lautet wie folgt und stellt die Eigenschaft Zeitgeberintervall auf 0 ein:

Private Sub cmdTimerStoppen_Click()
     Me.TimerInterval = 0
End Sub

Für cmdTimerFortsetzen hinterlegen wir die folgende Prozedur, die einfach das Zeitgeberintervall wieder auf 1.000 einstellt:

Private Sub cmdTimerFortsetzen_Click()
     Me.TimerInterval = 1000
End Sub

Damit erhalten wir das Ergebnis aus Bild 3.

Zwei Schaltflächen zum Stoppen und Starten des Zeitgebers

Bild 3: Zwei Schaltflächen zum Stoppen und Starten des Zeitgebers

Timer zurücksetzen

Wir wollen den Timer auch noch zurücksetzen können. Dazu fügen wir eine dritte Schaltfläche namens cmdTimerZuruecksetzen hinzu, die wir mit der folgenden Ereignisprozedur ausstatten:

Private Sub cmdTimerZuruecksetzen_Click()
     i = 0
     Me.Caption = "Zähler Zeitgeber: " & i
End Sub

Damit setzen wir den Wert von i wieder zurück – unabhängig davon, ob der Zeitgeber gerade läuft. Damit der Titel des Formulars direkt auf den aktuellen Stand gebracht wird, stellen wir die Eigenschaft Caption entsprechend ein.

Beispiel Startformular

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar