Wenn ich meinen Plotter aktiviere, sollte er initialisiert werden (ca. 30 Sekunden). In der Zwischenzeit möchte ich nur ein UserForm anzeigen, das besagt, dass wir warten müssen und das verschwindet, sobald die Initialisierung des Plotters abgeschlossen ist.
Mein Problem ist, dass:
Wenn ich VBA anweise, den Plotter zu initialisieren und dann das Benutzerformular zu öffnen, öffnet sich das Benutzerformular nach 30 Sekunden. Umgekehrt, wenn ich sage, dass zuerst das Benutzerformular geöffnet wird, wird der Rest des Codes ausgeführt, sobald das Benutzerformular geschlossen wird.
Haben Sie eine Idee, wie ich das Problem beheben oder umgehen kann? Vielen Dank.
@Aurelien: Im Makro wird die Verwendung von Fortschrittsbalken nicht empfohlen. Damit es ordnungsgemäß funktioniert, wäre eine Multithread-Verwaltung (Verwaltung mehrerer Aufgaben gleichzeitig) erforderlich. Denn wenn nicht, "friert" der Balken während der Ausführung des Makros ein und ist somit unbrauchbar.
Hier ist ein kurzes Makro, das das Problem veranschaulicht.
Wenn das Makro gestartet wird, wird UserForm1 angezeigt. Sobald wir es schließen, öffnet sich UserForm2 und danach wird MessageBox nacheinander geschlossen.
Das ist genau das Problem, das ich mit meinem Plotter habe, zum Beispiel müsste ich meine beiden Benutzerformulare gleichzeitig öffnen.
Vielen Dank
Redigieren:
Ah, ich habe gerade die Nachricht von .PL gesehen, ich wusste nicht, dass es die "_activate"-Methode gibt, ich wusste "_initialize" für Excel, aber es funktionierte nicht in SW oder ich hatte einen Fehler gemacht. Ich halte Sie auf dem Laufenden, danke!
Bearbeiten 2:
Es funktioniert nicht. Darf ich Sie bitten, Ihre Lösung mit dem von mir hochgeladenen Makro zu testen? Um herauszufinden, ob ich derjenige war, der einen Fehler gemacht hat. Vielen Dank
Anscheinend muss man bei Doevents nachsehen, um zu sehen: https://support.office.com/fr-fr/article/DoEvents-fonction-7af41eca-88e0-470d-adaf-0b3d4c2575b0
Dadurch wird das, was ich zuvor über den Fortschrittsbalken gesagt habe, eliminiert. ;-)
Zusammenfassend lässt sich sagen, dass Sie mit DoEvents warten können, bis eine Aktion vollständig abgeschlossen ist, bevor Sie den Vorgang fortsetzen.
So können Sie das Programm auf saubere Weise anhalten und nicht in einem Vakuum laufen lassen, das den Prozessor mit nutzlosen Berechnungen überlastet, um zu warten.
weil das Fenster gut geöffnet wird, aber der Inhalt nicht geladen wird (also weißes Fenster) und das Fenster geladen wird, sobald die Aktion abgeschlossen ist.
Ich entschuldige mich jetzt und schon, wenn ich in den nächsten zwei Wochen (Feiertagen) nicht aktiv sein werde.