Progressbar in Schleife einbinden

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
UserForm Label MsgBox
Bild

Betrifft: Progressbar in Schleife einbinden
von: Uli
Geschrieben am: 05.08.2015 13:23:52

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

Bild

Betrifft: AW: Progressbar in Schleife einbinden
von: Daniel
Geschrieben am: 05.08.2015 14:06:41
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

Bild

Betrifft: AW: Progressbar in Schleife einbinden
von: Uli
Geschrieben am: 05.08.2015 14:20:24
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.

Bild

Betrifft: AW: Progressbar in Schleife einbinden
von: Nepumuk
Geschrieben am: 05.08.2015 14:29:15
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

Bild

Betrifft: AW: Progressbar in Schleife einbinden
von: Günter
Geschrieben am: 06.08.2015 15:22:08
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

Bild

Betrifft: AW: Progressbar in Schleife einbinden
von: Daniel
Geschrieben am: 05.08.2015 14:37:39
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

Bild

Betrifft: AW: Progressbar in Schleife einbinden
von: Uli
Geschrieben am: 05.08.2015 14:52:40
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


Bild

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

Bild

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

Bild

Betrifft: Die Wiederholung eines Fehlers, behebt in nicht!
von: EtoPHG
Geschrieben am: 05.08.2015 15:27:07


Bild

Betrifft: AW: Progressbar in Schleife einbinden
von: Uli
Geschrieben am: 05.08.2015 15:57:34
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.

Bild

Betrifft: AW: Progressbar in Schleife einbinden
von: Daniel
Geschrieben am: 05.08.2015 16:08:38
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

Bild

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

Bild

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

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Progressbar in Schleife einbinden"