In der Statuszeile
Gerade bei großen Datenmengen oder langwierigen Aktionen in Access ist es sinnvoll, den Benutzer darüber zu informieren, wie weit die Arbeit bereits vorangeschritten ist. Da bietet sich eine grafische Darstellung an: der Fortschrittsbalken. Access bringt bereits alles mit, um ihn in der Statuszeile oder auf dem Formular anzuzeigen. Lorenz Hölscher bringt die gut versteckten Befehle dafür ans Tageslicht.
Den Fortschrittsbalken in der Statuszeile anzeigen
Der blaue Fortschrittsbalken in der Statuszeile lässt sich mit der SysCmd-Funktion erzeugen, die insgesamt so ein bisschen die Reste aller übriggebliebenen Access-Aufgaben gesammelt hat. Ihre tatsächliche Aufgabe übergeben Sie mit der jeweiligen Konstante des ersten Parameters.
Code im Formular statt in Standard-Modul
Sie könnten die folgende Prozedur ohne Einschränkungen auch in einem Modul mit F5 ausführen, aber dann wäre der VBA-Editor aktiv und Sie sähen die Statuszeile von Access nicht. Damit es dort trotzdem funktioniert, darf der VBA-Editor nicht im Vollbild sein und als nächstes Programm dahinter muss Access angezeigt werden, so dass Sie dessen Statuszeile gleichzeitig sehen.
Erstellen Sie zum Testen in einer leeren Datenbank ein leeres Formular namens frmFortschrittStatuszeile mit einer Schaltfläche namens btnStatuszeile wie im folgenden Bild:
Ein einfaches Testformular
Schreiben Sie in die btnStatuszeile_Click-Prozedur der Schaltfläche diesen Code hinein. Die Prozedur ist völlig nutzlos, sie enthält im Grunde nur eine inhaltsleere Schleife und zeigt dafür den Fortschrittsbalken an:
Private Sub btnStatuszeile_Click()
Dim lngZaehler As Long
Const clngMaximum = 100000
SysCmd acSysCmdInitMeter, "Bitte warten...", clngMaximum
For lngZaehler = 1 To clngMaximum
SysCmd acSysCmdUpdateMeter, lngZaehler
Next
SysCmd acSysCmdRemoveMeter
End SubDie Statuszeile beginnt mit der Initialisierung, wofür der erste Parameter auf acSysCmdInitMeter gestellt werden muss. Der zweite Parameter nennt den Text, der anschließend unverändert immer vor dem Fortschrittsbalken angezeigt wird.
Wechselnde Texte sind nicht möglich
Selbstverständlich möchten Sie vor dem Fortschrittsbalken einen dynamischen Text anzeigen, der beispielsweise den Fortschritt in Prozent-Werten oder die gerade bearbeitete Datei nennt. Das geht nicht! Falls Sie versuchen, den Text auch innerhalb der Schleife mittels acSysCmdInitMeter zu setzen, bleibt der blaue Balken immer nur am Anfang stehen, es dauert mehr als zehn Mal so lang und flackert ganz furchtbar.
Auch der Einsatz von SysCmd acSysCmdSetStatus, "neuer Text" in der Schleife führt direkt zu einem Laufzeitfehler, weil anschließend der Fortschrittsbalken ganz gelöscht (und durch diesen Text ersetzt) ist.
Im dritten Parameter übergeben Sie den Maximalwert für die 100%-Anzeige. Für die For/Next-Schleife müssen Sie selbstverständlich den gleichen Maximalwert setzen. Mit dem zweiten Aufruf von SysCmd und dem Parameter acSysCmdUpdateMeter wird der Fortschrittsbalken ständig aktualisiert. Der blaue Balken verlängert sich automatisch im Verhältnis von lngZaehler zu clngMaximum (dies kann statt einer Konstanten auch eine Variable sein).
