Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen

Progessbar

Betrifft: Progessbar von: Christian
Geschrieben am: 21.10.2014 08:42:18

Hallo zusammen,

ich verwende in einer Datei eine Progressbar, UserForm_Progress.

Eigentich funktioniert die Progessbar auch tadellos.
Die Progessbar wird zum Start der Excel Datei ausgeführt.
Sie läuft genau 20 Sekunden, da auch die Hintergrund aktualisierung 20 sekunden dauert. ( Mir ist bewusst, dass das eigentlich unsinnig ist, reicht aber vollkommen aus)

Der Fortschritt in der Progressbar wird allerdings nur ab 95% angezeigt. Was wahrscheinlcih darauf zurück zuführen ist, dass die Hintergrund aktualisierung etwas weniger als 20 Sekunden dauert.

Ist es möglich das der Fortschrittsbalken trotz aktualisierung angezeigt wird?

Das dazugehörige Modul sieht wie folgt aus:

Sub ProgressAnzeige()

UserForm_Progress.Show False 'Userform mit Fortschrittsanzeige
'Progressbalken initialisieren
With UserForm_Progress
.Caption = "Fortschrittsanzeige - Öffnen Datei " & ThisWorkbook.Name
.Label_Progress.Height = .Label_Hintergrund.Height
.Label_Progress.Left = .Label_Hintergrund.Left
.Label_Progress.Top = .Label_Hintergrund.Top
.Label_Progress.Width = 0
' .Label_Status.Caption = "Status: " & Application.StatusBar
End With
Takt = TimeSerial(0, 0, 2)
Zeit_Beginn = Now
Start_OnTime = Zeit_Beginn + Takt
Application.OnTime Start_OnTime, "Userform1_anzeigen"
End Sub

Private Sub Userform1_anzeigen()
  Dim dblProgress As Double
  'Fortschritt berechnen (Dezimalzahl zwischen 0 und 1)
  dblProgress = (Now - Zeit_Beginn) / TimeSerial(0, 0, 20)
  
  If dblProgress >= 1 Then 'Prüfung zum Starten des 2. Userforms
    Unload UserForm_Progress
    UserForm1.Show
  Else
    'Fortschrittsbalken aktualisieren
    With UserForm_Progress
      .Label_Progress.Width = dblProgress * .Label_Hintergrund.Width
      .Label_Progress.Caption = Format(dblProgress, "0%")
'      .Label_Status.Caption = "Status: " & Application.StatusBar
    End With
    Start_OnTime = Now + Takt
    Application.OnTime Start_OnTime, "Userform1_anzeigen"
  End If
End Sub
Sub Progressanzeige_Stoppen()
On Error Resume Next
Application.OnTime Start_OnTime, "Userform1_anzeigen", schedule:=False
Unload UserForm_Progress
End Sub
Die Progressbar hat mir ein freundlicher User aus diesem tollen Forum erstellt!

Gruß,

Christian

  

Betrifft: AW: Progessbar von: fcs
Geschrieben am: 21.10.2014 13:18:47

Hallo Christian,

scheinbar hat das OnTime-Ereignis keine Priorität vor der Aktualisierung der Datenabfrage. So das die Daten im Userform erst nach dem Ende der Datenaktualisierung neu dargestellt werden.

Leider kann ich dir da nicht weiter helfen.

Ich würde in dem Userform dann einfach eine Meldung anzeigen, dass die Daten aktualisietrt werden und das es ca. 20 Sekunden dauert.


Gruß
Franz


  

Betrifft: AW: Progessbar von: Christian
Geschrieben am: 21.10.2014 19:20:18

Hallo Franz,

joah dann kann man da wohl nichts machen. Danke trotzdem für deine Antwort.
Schönen Abend noch.

Gruß,

Christian