Fortschrittsbalken

dignsag

Erfahrenes Mitglied
Hallo,

ich habe eine Form (VBA Script) deren Durchführung ziehmlich lange dauert wenn ich den Startbutton betätige! Hat jemand eine Idee wie ich einen Fortschrittsbalken einbauen kann der dann anzeigt wie lange die Durchführung etwa noch dauert?

Gruß Dignsag
 
Du nimmst eine ProgressBar und lässt sie mit dem Code "mitwachsen" (Zum Beispiel alle 10 "Codezeilen" eine änderung des Fortschritts). Am besten Zeigst du uns aber mal den Code, der so lange dauert.
 
Soetwas benutze ich für mein Projekt (MusicPlayer

PHP:
Private Sub Timer1_Timer()
  Dim lCurPos As Long
  Dim lLength As Long
  lCurPos = SendCommand("status myMP3 position")
  lLength = SendCommand("status myMP3 length")
  If lCurPos >= lLength Then
    SendCommand ("play myMP3 from 0")
  End If
    allpos.Caption = TimeFormat(lLength)
    curpos.Caption = TimeFormat(lCurPos)
    ProgressBar.Max = lLength
    ProgressBar.Value = lCurPos
End Sub


Private Function TimeFormat(ByVal Ms&) As String
  Dim se$, mi$, st$, m As Single, h As Single
   If Ms <> 0 Then
     Ms = Ms / 1000
     h = Int(Ms / 3600)
     m = Int((Ms - h * 3600) / 60)
   End If
   
   se = CStr(Ms - h * 3600 - m * 60)
   mi = CStr(m)
   st = CStr(h)
   
   If Len(se) < 2 Then se = "0" & se
   If Len(mi) < 2 Then mi = "0" & mi
   
   TimeFormat = st & ":" & mi & ":" & se
End Function

allpos.Caption ist die gesamtzeit
curpos.Caption ist die position
beides Labels

Das mal ans Codebeispiel
 
Das Problem ist nicht der Code! der macht nicht viel! Das Problem ist die Datenmenge! es sind ungefähr 40 Millionen Zeilen in einer Textdatei die nacheinander bearbeitet werden! Und das kann wohl eine Weile dauern!
 
Na dann machst du das einfach so:
den Max-Wert der Progressbar stellst du auf 100 und dann gibst du alle 100 Zeilen zum Beispiel in der Value-Eigenschaft der Progressbar den Prozentwert * 100 aus, wie viel schon abgearbeitet wurde. (Also Value = NummerDerAktuellenZeile / 40.000.000 * 100)
 
OK habe das Problem gelöst, der Fortschrittsbalken funktioniert! Allerdings habe ich noch Probleme mit der berechnung einer geeigneten Bedingung wann der Balken aktualisiert werden soll! Sieht im Moment so aus:

Code:
      Open txtVornamenliste for Binary as #FreieDatei
  	 Do 'soll nur eine Schleife Symbolisieren
  	 ...
  
  		  ProgressBar.Value = (ProgressBar.Max * Loc(FreieDatei)) / LOF(FreieDatei)
      
  		  If hier sollte eine Bedingung sein then
  			   DoEvents
  		  End If
  	 ...
  	 Loop
      Close #FreieDatei

Ich dachte da an sowas wie sobald die Prozentzahl, also ProgressBar.Value, um eine ganze Zahl gestiegen ist dann soll er ausführen!
 
Zuletzt bearbeitet:
Zurück