Wenn es mal wieder etwas länger dauert, ist es sinnvoll, wenn der Anwender darüber informiert wird. Dies kann beispielsweise über eine kleine Anzeige in der Statusleiste unterhalb des Tabellenblatts erfolgen. In diesem Artikel zeigen wir Ihnen, wie sich das relativ einfach umsetzen lässt.
Zur Erläuterung habe ich eine kleine Beispieldatei aufgebaut, in welche einfach fortlaufende Zahlen eingetragen werden. Darüber hinaus ist zur Steuerung der Programmgeschwindigkeit eine Schleife integriert, so dass die Anzeige des Fortschrittsbalkens gut verfolgt und getestet werden kann. Die Geschwindigkeit lässt sich über einen Schieberegler von 1 bis 100 regulieren, siehe Abbildung 1.
Abbildung 1
Über einen Klick auf die Schaltfläche "Start" wird die Prozedur gestartet. Dabei werden die Zahlen ab Zeile 10 eingetragen und die Fortschrittsanzeige in der Statusleiste eingeblendet.
Ein weiteres kleines Feature dieser Beispieldatei ist, dass Sie für die Anzeige des Fortschrittbalkens verschiedene Zeichen über ein Dropdown-Menü festlegen können, siehe Abbildung 2.
Abbildung 2
Die zur Auswahl verfügbaren Zeichen sind auf einem zweiten Tabellenblatt mit dem Blattnamen "Zeichen" hinterlegt. Insgesamt stehen dort 20 verschiedene Zeichen zur Auswahl, welche auch beliebig geändert werden können. Als einzige Einschränkung gilt, dass es sich um ein Zeichen aus dem ASCII-Zeichensatz handeln muss, siehe Abbildung 3.
Abbildung 3
Damit das ausgewählte Zeichen im Fortschrittsbalken angezeigt wird, sind folgende VBA-Prozeduren erforderlich. Erfassen Sie diese bitte in einem leeren Codemodul:
Public bln As Boolean Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub Start_Laufschrift() '** Fortschrittsbalken in Statusleiste '** Dimensionierung der Variablen Dim lngSpeed As Long Dim iCounter As Integer Dim lngAnz As Long 'Anzahl Punkte '** Zählerstand setzen iCounter = 1 '** Anzahl definieren lngAnz = 15 '** Löschen der Einträge ActiveSheet.Range("A10:ZZ10000").ClearContents '** Ermittlung der Anzahl durchläufe '** Spalten durchlaufen For s = 1 To lngAnz '** Zeilen durchlaufen For Z = 10 To 1000 '** Werte eintragen ActiveSheet.Cells(Z, s).Value = Z * s Next Z '** Statusleiste aktualisieren StatusAnzeige "Fortschritt: ", iCounter / lngAnz '** Nur zu Testzwecken!! Sleep Abs(ActiveSheet.Range("F4").Value - 99) * 5 '** Zähler erhöhen iCounter = iCounter + 1 '** Zellbearbeitung ermöglichen (Optional) DoEvents Next s '** Bestätigung ausgeben MsgBox "Aufgabe erfolgreich erledigt!", vbInformation, "Hinweis" '** Statusleiste zurücksetzen Application.StatusBar = False End Sub
Private Function StatusAnzeige(sTxt As String, sWert As Single) '** Dimensionierung der Variablen Dim iWert As Integer, iWiederh As Integer With WorksheetFunction iWert = .Round(sWert, 2) * 100 iWiederh = Int(iWert / 10) Application.StatusBar = sTxt & .Rept("", 10 - iWiederh) & "" & iWert & "%" & _ " " & .Rept(Chr(Sheets("Zeichen").Range("D3").Value), iWiederh) End With End Function
Wie Sie sehen wird vor dem Balken noch der Fortschritt in Prozent ausgegeben, vergl. Abbildung 4.
Abbildung 4
Wenn Sie über das DropDown-Menü ein anderes Zeichen auswählen, so wird dieses sofort beim nächsten Start in der Statusleiste verwendet, siehe Abbildung 5.
Abbildung 5
Die Beispieldatei können Sie unter dem folgenden Link kostenlos herunterladen. Viel Spaß beim Probieren.