AW: Hallo Matthias R -> Fortschrittsbalken
18.07.2006 14:24:41
Matthias
Hallo Andreas,
ok, ich habe das Beispiel vom anderen Matthias mal ein wenig angepasst und einiges geändert:
Sub Statusbalken(wert, max, Optional proz = False)
' wert = aktueller Fortschritt
' max = maximaler Wert (100%)
' wenn max<0, wird die Statuszeile wieder zurückgesetzt
' proz: wenn True, dann Prozentangabe links vom Fortschrittsbalken
Const maxbreite = 100 'Breite des Statusbalkens in Zeichen
Dim Mess As String
Dim P As Integer, pro As String
If max > 0 Then
P = wert / max * maxbreite
If proz Then Mess = Format(wert / max, "0% ")
Mess = Mess & String(P, ChrW(&H25A0)) & String(maxbreite - P, ChrW(&H25A1))
If Application.StatusBar <> Mess Then Application.StatusBar = Mess
Else
Application.StatusBar = False
End If
End Sub
Sub test()
Const anz = 100000
Dim i, j
For i = 1 To anz
Statusbalken i, anz, True 'mit Prozentangabe
Next i
MsgBox "Fertig!"
Statusbalken 1, -1 'ausschalten
End Sub
Du musst den Prozeduraufruf "Statusbalken wert, max" in einer Schleife setzen, von der du weißt, wie oft sie durchlaufen wird. Ich habe den Wert so hoch gesetzt, damit man auch etwas sieht ;-)
du könntest es auch so machen:
Sub test2()
Const anz = 300
Dim i, j
For i = 1 To anz
Statusbalken i, anz
'innere Schleife
For j = 1 To 1000000
'tu nix
Next j
Next i
MsgBox "Fertig!"
Statusbalken 1, -1 'ausschalten
End Sub
Wie gesagt, der Aufruf muss in einer Schleife stehen, damit eine laufende Fortschrittsanzeige zustande kommt. Und zwar eher nicht in einer Schleife, die 10000 mal durchlaufen wird (wie oben in test), dann wird die Prozedur zu oft aufgerufen und kostet nur Rechenzeit. Im zweiten Beispiel (test2) den Aufruft Statusbalken also in der äußeren Schleife.
Gruß Matthias