Fortschrittsbalken für gecallte Sub's

Outsider77

Erfahrenes Mitglied
Hallo zusammen!
Ich habe auf einer Userform einen Button, bei dessen Klick
eine Excel-Datei gespeichert wird.
Darauffolgend werden 3 verschiedene Sub's gecallt,
die einige Zeit in Anspruch nehmen, da sie über das Firmennetzwerk
einige Daten abrufen.
Vom Klick bis zum Ende der 3. Sub vergehen also in etwa 30 Sekunden.
Meine Frage: ist es möglich, für die gesamte Dauer eine Progressbar einzubauen?
Ich habe das Problem, dass die Form, die die Progressbar enthält,
die ganze Zeit stehen bleibt, ohne das der Fortschritt weiterläuft (siehe Anhang).
Das gesamte Programm läuft dementsprechend auch nicht weiter.
Erst beim Schließen der Form geht's weiter.
Ich benutze eine
Code:
Public progress As Integer
die ich dann in jeder der 3 Sub's und beim Speichern erhöhe.
Wenn ich die Form mit der Progressbar lade, setze ich den Wert = progress.
Code:
Private Sub UserForm_Activate()
ProgressBar1.Value = progress
End Sub
Ich befürchte, dass die Form deswegen ohne Veränderung stehen bleibt,
weil auf eine Eingabe oder ähnliches gewartet wird.
Leider komme ich an dieser Stelle nicht weiter.
Weiß jemand eine Lösung für mein Problem?
Bin für jede Hilfe dankbar!
Gruß Outi
 

Anhänge

  • userform.JPG
    userform.JPG
    6,2 KB · Aufrufe: 53
Zuletzt bearbeitet:

ronaldh

Erfahrenes Mitglied
Das liegt wohl eher daran, dass Du die Wertzuweisung für die Progressbar in das Form_Activate Ereignis getan hast. Wenn die Form nicht aktiviert wird (weil sie schon aktiv ist!), wird das Ereignis natürlich nicht ausgelöst.

Du kannst in die anderen Formen, die aufgerufen werden, beim Aufruf die Progressbar direkt ändern:

Code:
       UserForm.Progressbar1.Value = UserForm.Progressbar1.Value + 1
       DoEvents

Grüsse
ronaldh
 

Outsider77

Erfahrenes Mitglied
Danke für Deine Antwort!
Wenn ich Dich richtig verstehe,
muß ich die Form mit der Progressbar
dann nur noch anzeigen lassen mit
Code:
Userform.Show
und am Ende jeder gecallten Sub "schließen" mit
Code:
Userform.Hide
Ist das so richtig?

Mir fällt eben noch eine Frage ein.
Man kann ja in einem Modul mittels
Code:
Public Test As String
eine öffentliche Variable deklarieren.
Ich würde diese Variable gerne noch genauer festlegen, in etwa
Code:
Public Test As String = Range("A1")
Eine Konstante ist hier ja nicht möglich,
allerdings erhalte ich bei dem Versuch, meine Variable Test
so zu deklarieren, immer eine Fehlermeldung (Anweisungsende erwartet).
Wie kann ich das anders bewerkstelligen?
Meine Variable bezieht sich immer auf ein und den selben Range!
Danke schonmal vorab!
Gruß Outi
 
Zuletzt bearbeitet:

ronaldh

Erfahrenes Mitglied
Nein, Deine Form musst Du nicht schließen (das sieht ja blöd aus, wenn die immer neu aufflackert). Lass die einfach offen, und aktualisiere die Progressbar mit dem oben genannten Befehl.

Deiner anderen Frage mit der Variabendeklaration entnehme ich, dass Du mit Excel-VBA arbeitest (das hattest Du noch nicht erwähnt). Ich vermute, dass die Wertzuweisung bei Variablendeklaration nicht möglich ist. Wenn Du die Variable als Public definierst, weist Du ihr den gewünschten Wert einfach bei Programmstart zu, dann sollte es ja auch passen.

Grüsse
ronaldh
 

Outsider77

Erfahrenes Mitglied
Sorry! Ja ich arbeite mit VBA.
Das Problem mit der offenen Form ist,
dass irgendwie gar nichts passiert.
Soll heißen, das ganze Programm läuft nicht weiter.
Ich sehe zwar den ersten Fortschritt, mehr aber nicht.
Nur nochmal zur Erklärung, damit wir nicht aneinander vorbeireden:
Zu Beginn der ersten Sub setze ich den Wert der Progressbar
und lasse die Form anzeigen mit Userform.Show
Die erste Sub läuft durch.
Dann setze ich zu Beginn der zweiten Sub den Wert der Progressbar neu
und lasse die Form erneut anzeigen mit Userform.Show
Die zweite Sub läuft auch durch bis zum Ende.
Mit der dritten Sub mache ich genau das Selbe.
Problem hierbei: direkt beim ersten Anzeigen der Form mit Progressbar
steht alles still.
Erst beim Schließen-Button oben rechts läuft es weiter
bis zum nächsten Anzeigen der Form mit Progressbar usw.
Sorry, vielleicht stelle ich mich ein Wenig blöd an!

Die Sache mit der Variablen: klingt logisch und werde ich morgen testen.
Sollte aber so funktionieren. Danke!
Gruß
 

ronaldh

Erfahrenes Mitglied
Dann wirst Du die Form wohl modal anzeigen. Dann geht wirklich nichts weiter. Du musst die Form mit dem Attribt "Modeless" aufrufen, dann hält sie den weiteren Programmablauf nicht an.
 

Outsider77

Erfahrenes Mitglied
Hey danke, das funktioniert soweit schon mal sehr gut.
Allerdings bleibt noch eine Sache:
am Ende aller Sub's läßt sich die Form mit der Progressbar nicht schließen.
Hast Du dafür eventuell auch noch eine Lösung?
Ansonsten paßt der Rest super - danke!
Gruß Outi
 

Outsider77

Erfahrenes Mitglied
Erstmal vielen Dank, dass Du Dich so um mich kümmerst!
Ich glaube, dass bei einer Form, die mit
Code:
Userform.Show vbModeless
angezeigt wird, der Befehl
Code:
Unload Userform
keine Wirkung hat.
Jedenfalls bei mir nicht, als ich es eben getestet habe.
 

ronaldh

Erfahrenes Mitglied
Das macht keinen Unterschied, ob die Form modal oder modeless geladen ist. Wo hast Du denn den Unload-Befehl eingebaut? Der gehört in die Routine, mit der Du nacheinander Deine Sub's aufrufst.
 

Neue Beiträge