Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1440to1444
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
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

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.

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

Anzeige
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

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.

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

Anzeige
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

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

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige