Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Progressbar in Schleife einbinden

Progressbar in Schleife einbinden
05.08.2015 13:23:52
Uli
Hallo liebe Experten.
ich habe eine Prozedur, die Dateien in meinem Netzwerk sucht und die Dateinamen in ein Tabellenblatt einträgt.
Da die Dateien ziemlich verstreut sind, dauert die Prozedur etwas länger. Ich möchte gerne eine Progressbar in diese Schleife einbinden und schaff es nicht.
Kann mir da mal jemand helfen?
Ein Auszug aus dem Code:
Private Sub cmdEinlesen_Click()
Dim fs As Object
Dim fVerz As Object
Dim fDatei As Object
Dim fdateien As Object
Dim strDat As String, blatt1 As String, blatt2 As String
Dim Zeile As Integer, anzfehler As Integer
Dim jahr As String
Dim aw
Set myrange = Range("Monatsverzeichnis")
blatt1 = "Dateinamen"
blatt2 = "Stammdaten"
monat = Me.ComboBox1
Zeile = 5
anzfehler = 0
'On Error GoTo abbruch
Set fs = CreateObject("scripting.FileSystemObject")
'Hier das Verzeichnis angeben, welches durchsucht werden soll
Set fVerz = fs.getFolder(Sheets(blatt2).[f2] & "\" & Me.ComboBox2.Value & "\" & Application. _
WorksheetFunction.VLookup(monat, myrange, 2, False) & "\Listen\")
Set fdateien = fVerz.Files
On Error GoTo fehler
Sheets(blatt1).[c6:c532].ClearContents 'Dateinamenspalte löschen
Sheets(blatt1).[f6:f532].ClearContents 'Versandbestätigung löschen
For Each fDatei In fdateien
If InStr(fDatei, "") > 0 Then
Zeile = Zeile + 1
'Hier wird der Dateiname in Spalte C eingetragen
Sheets(blatt1).Cells(Zeile, 3) = fDatei.Name
End If
GoTo weiter
fehler:
anzfehler = anzfehler + 1
weiter:
On Error Resume Next
Next
Set fs = Nothing
Set fVerz = Nothing
Set fdateien = Nothing
If anzfehler > 0 Then
aw = MsgBox("Dateinamen: Es gab " & anzfehler & " Fehler bei der Ausführung des Makros!",  _
vbInformation, "Oops...")
Me.lblstatus.Caption = anzfehler & " Fehler"
Else
Me.lblstatus = "OK"
End If
Me.lblstatusversand = "" 'Versandinnformation löschen
Exit Sub
abbruch:
aw = MsgBox("Dateinamen: Fehler mit Makroabbruch", vbInformation, "Oops...")
Me.lblstatus = "Abbruch des Makros"
End Sub

Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Progressbar in Schleife einbinden
05.08.2015 14:06:41
Daniel
HI
eine Fortschrittsanzeige geht am einfachsten über einen Hinweistext in der Statusleiste.
Dim Zähler = as long
For Each fDatei In fdateien
Zähler = Zähler + 1
Application.Stausbar = "In Arbeit Datei: " & Zähler & " von " & fDateien.count
Hier dann der weitere Code
Next
Application.Statusbar = False ' gibt Statusleiste wieder für Excel frei
einen Bearbeitungsfortschritt in Prozent kannst du mit Format(Zähler / fdateien.Count, "0%") in die Statusleiste einbringen.
ein echter Fortschrittsbalken wird schwierig, mit einfachem VBA kannst du nur Text in der Statusleiste anzeigen lassen und das auch nur in der Schriftart Tahoma, ein Fortschrittsbalken müsste dann so realisiert werden: String(10 * Zähler / fdateien.Count, "x") (ein besseres Zeichen als das "x" darfst du dir gerne selber im Zeichensatz von tahoma aussuchen)
Gruß Daniel

Anzeige
AW: Progressbar in Schleife einbinden
05.08.2015 14:20:24
Uli
Hallo Daniel,
die Statusleiste gibt bei mir nicht viel her. Da hab ich schon alles probiert. Geht das nicht besser über eine Progressbar, die ich in meine Schleife mit einbinde?
Ich dachte mir das so:
Eine Schleife zählt die Dateien in den entsprechenden Verzeichnissen und addiert sie zusammen.
Der Wert wird als 100 % angesehen und die Schleife, welche meine Dateien einliest, paßt die Progressbar an. Wäre sowas möglich?
U.

Anzeige
AW: Progressbar in Schleife einbinden
05.08.2015 14:29:15
Nepumuk
Hallo,
wenn du an Stelle des langsamen Filesystem-Objekt mit der Dir-Funktion machst und die Dateinamen erst in ein Array anstatt direkt in die Zellen schreibst, dauert das Ganze weniger als eine Sekunde.
Gruß
Nepumuk

AW: Progressbar in Schleife einbinden
06.08.2015 15:22:08
Günter
Hallo,
ich habe auch mit vielen Datensätzen und einem langsamen Netzwerk zu tun.
Vieleicht ist auch ein zwischengeschalteter Virenscanner beteiligt?
Ich habe einen "Bastelversuch" von so einer Zählvariante hier, und frage
mich, ob man damit was anfangen bzw. verbessern könnte.
Die verwendeten Makros, denke ich, habe ich alle von hier ;)
Besser wäre es natürlich mit Bezug auf die Zeilennummer der "letzten Zeile" beim
Einlesen der Datensätze arbeiten zu können.
Ich habs mal hochgeladen.
https://www.herber.de/bbs/user/99367.xls
Gruss,
Günter

Anzeige
AW: Progressbar in Schleife einbinden
05.08.2015 14:37:39
Daniel
Hi
es gibt noch ein ActiveX-Steuerelement "Progressbar" (findest du unter "weitere Steuerelemente" als "Microsoft Progressbar Control")
dieses kannst du auf dem Blatt oder besser auf einer nichtmodalen Userform platzieren.
um den Fortschritt anzuzeigen setzt du den .Value-Wert der Userform auf einen Wert zwischen dem Min- und Max-Wert der Progressbar setzen.
dh im Prinzip ist es egal, ob du, wenn die Hälfte der Dateien bearbeitet sind, den Wert 50% in der Statusleiste ausgibst oder die 50 in den .Value-Wert der Progressbar schreibst.
Der Aufwand, den du betreiben musst um den Fortschritt überhaupt zu ermitteln ist in beiden Varianten der gleiche.
Gruß Daniel

Anzeige
AW: Progressbar in Schleife einbinden
05.08.2015 14:52:40
Uli
Danke für die Hinweise.
ich habs mit der Statusleiste probiert. Klappt bis zum einlesen der zweiten Datei. Dann kommt die Fehlermeldung "Objekt unterstützt die Eigenschaft oder Methode nicht".
Mein code lautet nun (Auszug)
Sub Einlesen
For Each fDatei In fdateien
zähler = zähler + 1
fortschritt = "Fortschritt: " & zähler & " von" & fdateien.Count
'MsgBox fortschritt
Application.Stausbar = fortschritt
If InStr(fDatei, "") > 0 Then
Zeile = Zeile + 1
'Hier wird der Dateiname in Spalte C eingetragen
Sheets(blatt1).Cells(Zeile, 3) = fDatei.Name
End If
GoTo weiter
fehler:
anzfehler = anzfehler + 1
weiter:
On Error Resume Next
Next
End Sub

Anzeige
AW: Progressbar in Schleife einbinden
05.08.2015 15:02:16
Daniel
Hi
und in welcher Programmzeile tritt der Fehler auf?
Gruß Daniel

AW: Progressbar in Schleife einbinden
05.08.2015 15:23:26
Uli
Application.Stausbar = fortschritt

Die Wiederholung eines Fehlers, behebt in nicht!
05.08.2015 15:27:07
EtoPHG

Anzeige
AW: Progressbar in Schleife einbinden
05.08.2015 15:57:34
Uli
Hallo nochmal,
jetzt hab ich doch nochmal eine kleine Frage. Der Fortschritt wird mir sehr in der Statusleiste an meinem Hauptbildschirm angezeigt. ich arbeite hier aber mit drei Bildschirmen. Ist es möglich, diese Statuszeile in meine Userform zu integrieren?
Ich habe es versucht mit Label.Caption =application.Statusbar
klappt aber nicht.

Anzeige
AW: Progressbar in Schleife einbinden
05.08.2015 16:08:38
Daniel
Die Statuszeile ist fester bestandteil des Excelfensters und ist somit nicht veränderbar
wenn du eine Userform hast, kannst du auch das Progressbar-Steuerelement nutzen (hab ich aber schon beschrieben) oder den Text in einem Label ausgeben.
Gruß Daniel

option explicit?
05.08.2015 15:14:27
Michael
Hi zusammen,
was soll denn eine STA_USBAR sein?
Application.Sta!!!usbar = fortschritt
Grüße,
Michael

Anzeige
AW: option explicit?
05.08.2015 15:25:46
Uli
Wow, ich hab mich einfach nur verschrieben. Entschuldigung. Jetzt klappt es. Danke an ALLE!!
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Progressbar in Excel VBA einbinden


Schritt-für-Schritt-Anleitung

  1. Userform erstellen:

    • Öffne den VBA-Editor (Alt + F11).
    • Füge eine neue Userform hinzu (Rechtsklick auf "VBAProject" > Einfügen > Userform).
    • Füge ein ProgressBar-Steuerelement hinzu (Rechtsklick auf die Toolbox > Weitere Steuerelemente > Wähle "Microsoft ProgressBar Control").
  2. Code einfügen:

    • Füge den folgenden Code in die Userform ein:
    Private Sub cmdEinlesen_Click()
       Dim fs As Object
       Dim fVerz As Object
       Dim fDatei As Object
       Dim fdateien As Object
       Dim Zeile As Integer
       Dim anzfehler As Integer
       Dim jahr As String
       Dim progress As Integer
    
       Set fs = CreateObject("scripting.FileSystemObject")
       Set fVerz = fs.GetFolder("Pfad\zu\deinem\Verzeichnis")
       Set fdateien = fVerz.Files
    
       Me.ProgressBar1.Min = 0
       Me.ProgressBar1.Max = fdateien.Count
    
       Zeile = 5
       anzfehler = 0
    
       For Each fDatei In fdateien
           Zeile = Zeile + 1
           Me.ProgressBar1.Value = Zeile
           ' Hier wird der Dateiname in Spalte C eingetragen
           Sheets("Dateinamen").Cells(Zeile, 3) = fDatei.Name
       Next
    
       Set fs = Nothing
       Set fVerz = Nothing
       Set fdateien = Nothing
    End Sub
  3. Fortschritt in Prozent anzeigen:

    • Um den Fortschritt in Prozent anzuzeigen, kannst du den Wert des Fortschrittsbalkens so formatieren:
    Dim fortschritt As Double
    fortschritt = (Zeile / fdateien.Count) * 100
    Me.lblStatus.Caption = "Fortschritt: " & Format(fortschritt, "0.00") & "%"

Häufige Fehler und Lösungen

  • Fehler: "Objekt unterstützt die Eigenschaft oder Methode nicht":

    • Überprüfe, ob du Application.Statusbar richtig geschrieben hast. Es sollte Application.StatusBar sein.
  • Fortschrittsbalken aktualisiert sich nicht:

    • Stelle sicher, dass die Userform sichtbar ist, während das Makro läuft. Aktivere sie mit UserForm1.Show.

Alternative Methoden

  • Statusleiste verwenden:

    • Anstelle einer Progressbar kannst du den Fortschritt in der Statusleiste von Excel anzeigen:
    Application.StatusBar = "In Arbeit Datei: " & Zeile & " von " & fdateien.Count
  • Array verwenden:

    • Anstatt direkt in die Zellen zu schreiben, kannst du die Dateinamen in ein Array laden, um die Performance zu verbessern.

Praktische Beispiele

  • Beispiel für eine einfache Fortschrittsanzeige in der Statusleiste:
Dim Zähler As Long
For Each fDatei In fdateien
    Zähler = Zähler + 1
    Application.StatusBar = "Fortschritt: " & Format(Zähler / fdateien.Count, "0%")
    ' Weitere Verarbeitung...
Next
Application.StatusBar = False
  • Beispiel für die Verwendung eines ProgressBar-Steuerelements in einer Userform:
Me.ProgressBar1.Value = Zähler

Tipps für Profis

  • Verwende ein ActiveX-Steuerelement:

    • Das "Microsoft ProgressBar Control" bietet eine bessere Darstellung als die Statusleiste und kann direkt in einer Userform integriert werden.
  • Vermeide lange Schleifen:

    • Wenn möglich, nutze die Dir-Funktion, um die Dateinamen schneller zu verarbeiten.

FAQ: Häufige Fragen

1. Wie kann ich den Fortschritt in einer Userform anzeigen? Du kannst das ProgressBar-Steuerelement verwenden und den Wert in deiner Schleife anpassen.

2. Ist es möglich, die Statuszeile in meiner Userform darzustellen? Die Statuszeile selbst ist nicht veränderbar; du kannst jedoch den Text in einem Label innerhalb der Userform ausgeben.

3. Wie kann ich den Fortschrittsbalken zurücksetzen? Setze den Wert des ProgressBar-Steuerelements zurück auf den Minimalwert:

Me.ProgressBar1.Value = Me.ProgressBar1.Min

4. Was tun, wenn die Userform nicht aktualisiert? Stelle sicher, dass die Userform während der Schleife sichtbar bleibt und verwende DoEvents, um die Benutzeroberfläche zu aktualisieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige