Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1536to1540
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 während Makro
19.01.2017 14:05:21
Mike
Hallo liebe Excel Gemeinde,
ich komme einfach nicht weiter, ich hoffe Ihr könnt mir (wieder einmal) helfen! :-)
Ich möchte während eines ziemlich langen Makros eine Verlaufsanzeige sichtbar haben, damit der _ User sieht, dass sich etwas in Arbeit befindet. Dazu habe ich vieles gefunden, hab's aber leider nur zur Hälfte ans Laufen gebracht. Habe ein Userform gebaut mit diesem Code:

Private Sub UserForm_Activate()
Dim xTop As Long, xLeft As Long
Me.StartUpPosition = 0
With Application
xLeft = .Left + .Width / 2 - Me.Width / 2
xTop = .Top + .Height / 2 - Me.Height / 2
End With
With Me
.Left = xLeft
.Top = xTop
End With
SW = 1
Label2.Width = 0
Call Progressbar1
End Sub

Am Ende wird das Makro Call Progressbar1 aufgerufen:
Sub Progressbar1()
SW = 2 'Schrittweite festlegen
Länge = 0
Schritt = PB1.Label1.Width / SW 'Schrittbreite pro Aktualisierung
For i = 2 To SW
Länge = Länge + Schritt
PB1.Label2.Width = Länge
PB1.Label3.Caption = Format(i / SW, "0 %")
DoEvents
---------ab hier folgt jede Menge Code wie Tabellenblätter füllen, sortieren, neu anlegen, etc.
'Bildschirmaktualisierung ausschalten
Application.ScreenUpdating = False
'
'
'
'
Application.ScreenUpdating = True
Next
Application.Wait (Now + TimeValue("0:00:2"))
Unload PB1
End Sub
Mein Problem besteht darin, dass zwar die Fortschrittsanzeige sichtbar ist, allerding sofort mit 100% und halben blauen Balken angeziegt wird. Es bewegt sich allerdings nix. Zum Ende des Makros verschwindet sie auch wieder.
HAt jemand vielleicht eine bessere Lösung? Ist die Lösung abhängig vom jeweiligen Code der abgearbeitet wird? Ich hab's schon stundenlang Gegoogelt, jedoch werde ich nicht schlau daraus.
Viielen Dank für eure Hilfe!
Gruß
Mike

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Progressbar während Makro
19.01.2017 14:34:56
Sebastian
Hallo,
ich habe dir hier meine Lösung für eine einfache Progressbar hochgeladen: https://www.herber.de/bbs/user/110714.zip
Anschließend der Beispielcode, wie diese zu implementieren ist:
Option Explicit
Public Sub test()
Dim prgBar As New clsProgress
With prgBar
.Bezeichnung = "Fensterbezeichnung"
.Max = 100
.Min = 0
.Vermerk = "Bearbeitung läuft, bitte warten.."
.show
End With
Dim i As Integer
For i = 1 To 25
prgBar.update (i * 4)
Application.Wait (Now + TimeValue("00:00:01"))
DoEvents
Next i
Set prgBar = Nothing
End Sub
Viele Grüße
Sebastian
Anzeige
AW: Progressbar während Makro
19.01.2017 14:55:27
Daniel
Hi
du kannst das schon per Userform machen.
der Ablauf wäre folgender:
1. das Makro, welches die Schleife ausführt, steht in einem allgemeinen Modul.
2. die Userform mit dem Fortschrittsbalken hat die Eigenschaft ShowModal=False
3. du brauchst kein Label, es gibt ein Steuerelement Progressbar (muss ggf dem Werkzeugkasten hinzugefügt werden), welches du verwenden kannst. du musst dann nur den .Value-Wert der Progressbar den entsprechenden Wert zuweisen.
auch den Min- und Max-Wert der Progressbar kannst du über die Eigenschaften einstellen.
4. mit .Repaint kannst du die Userform neu zeichnen lassen, damit sie korrekt angezeigt wird.
das sieht dann in etwa so aus:
Start = 0
Ende = 100
Userform1.Show 0
Userform1.Progressbar1.Min = Start
Userform1.Progressbar1.Max = Ende
For i = Start to Ende
Userform1.Progressbar1.Value = i
Userform1.Repaint
hier dein Schleifencode
Next
Unload Userform1
Gruß Daniel
Anzeige
AW: Progressbar während Makro
19.01.2017 17:46:48
Mike
Hallo Daniel,
danke für die Idee,
als Anfänger hat man's manchmal schwer....
Ich habe jetzt meine Code einfach da reingepackt. (Ist wahrscheinlich falsch?)
Sub UserForm()
Start = 0
Ende = 100
UserForm1.show 0
UserForm1.ProgressBar1.Min = Start
UserForm1.ProgressBar1.Max = Ende
For i = Start To Ende
UserForm1.ProgressBar1.Value = i
UserForm1.Repaint
Sheets("Person").Select
Cells.Select
Selection.Copy
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A1").Select
Next
Unload UserForm1
End Sub

Der Code ist natürlich wesentlich länger. Fährt die Schleife den jetzt immer durch? Kannst du mir einen Tip geben, wie man das anstellen kann?. Mein Code hat ca. 500 Zeilen.
Danke für die Info.
Gruß
Mike
Anzeige
AW: Progressbar während Makro
20.01.2017 07:58:30
Mike
Hallo Daniel,
danke für die Idee,
als Anfänger hat man's manchmal schwer....
Ich habe jetzt meine Code einfach da reingepackt. (Ist wahrscheinlich falsch?)
Sub UserForm()
Start = 0
Ende = 100
UserForm1.show 0
UserForm1.ProgressBar1.Min = Start
UserForm1.ProgressBar1.Max = Ende
For i = Start To Ende
UserForm1.ProgressBar1.Value = i
UserForm1.Repaint
Sheets("Person").Select
Cells.Select
Selection.Copy
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A1").Select
Next
Unload UserForm1
End Sub

Der Code ist natürlich wesentlich länger. Fährt die Schleife den jetzt immer durch? Kannst du mir einen Tip geben, wie man das anstellen kann?. Mein Code hat ca. 500 Zeilen.
Danke für die Info.
Gruß
Mike
Anzeige
AW: Progressbar während Makro
19.01.2017 15:01:57
Mike
Hallo Sebastian, vielen Dank für die tolle Anzeige, funktioniert in einer leeren Arbeitsmappe ja genauso wie ich das gern haben möchte. Jetzt steh ich allerdings auf dem Schlauch wo ich meinen Code für mein großes Makro einbasteln soll?
Danke schon mal im Voraus!
Gruß
Mike
AW: Progressbar während Makro
19.01.2017 15:09:47
Sebastian
Hallo Mike,
ersetze die For-Schleife mit deinen Aufgaben und aktulisiere die Progressbar mit der .update(Wert) Methode.
Viele Grüße
Sebastian
AW: Progressbar während Makro
19.01.2017 15:46:57
Mike
Hallo Sebastian,
was bedeuten diese Codezeilen?
For i = 1 To 25
prgBar.update (i * 4)
Application.Wait (Now + TimeValue("00:00:01"))
Ist das richtig hier an dieser Stelle meinen Code einzufügen? (Vor DoEvents)
mein Code umfasst ca. 500 Zeilen....
Danke Dir!
Gruß
Mike
Anzeige
AW: Progressbar während Makro
19.01.2017 18:37:16
Sebastian
Hallo Mike,

Option Explicit
Public Sub test()
'Objekt vom Typ Progressbar erstellen
Dim prgBar As New clsProgress
'Der Progressbar Initialwerte übergeben
With prgBar
.Bezeichnung = "Fensterbezeichnung"
.Max = 100
.Min = 0
.Vermerk = "Bearbeitung läuft, bitte warten.."
.show
End With
'Hier kommt nun dein Code
'Wichtig, immer wieder die Progressbar wie folgt aktualisieren, damit ein Fortschritt  _
ersichtlich ist
Call prgBar.update(Wert)
'Objekt vom Typ clsProgressbar wieder leeren
Set prgBar = Nothing
End Sub
Viele Grüße
Sebastian
AW: Progressbar während Makro
20.01.2017 12:37:00
Mike
Hallo Sebastian,
vielen, vielen Dank. Es klappt. NAch viel probieren. Sieht aber echt gut aus!
Danke!
Gruß
Mike
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige