UserForm schließen

Hallo,

ich habe eine Nicht-Modale UserForm damit ich in dem Tabellenblatt weiterhin arbeiten kann.
Da ich ab und an die Arbeitsmappe wechsel (beide sind geöffnet) habe ich einen Code eingefügt welcher mir in diesem Fall die UserForm schließt:

Private Sub Workbook\_WindowDeactivate(ByVal Wn As Window)
ufmListe.Hide
End Sub

Nun ist das Problem, dass ich die UserForm manuell schließe(n muss). Wenn ich jetzt die Datei wechsel bringt er mir einen Laufzeitfehler (9): Index außerhalb des gültigen Bereiches.
Dies ist verständlich, da die UserForm nicht mehr geöffnet ist und er sie somit nicht mehr schließen kann.

Jetzt wöllte ich gern eine If-Then-Abfrage einbauen, der überprüft ob die UserForm noch geöffnet ist (a la If „ufmListe.Visible = True Then“). Irgendwie bekomme ich das aber nicht auf die Reihe. Wer weiß Rat?

LG Tobi@s

Hallo Tobias,

geöffnet) habe ich einen Code eingefügt welcher mir in diesem
Fall die UserForm schließt:

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
ufmListe.Hide
End Sub

du versteckst die UF, das wäre Schließen:
Unload ufmListe

Nun ist das Problem, dass ich die UserForm manuell schließe(n
muss). Wenn ich jetzt die Datei wechsel bringt er mir einen
Laufzeitfehler (9): Index außerhalb des gültigen Bereiches.
Dies ist verständlich, da die UserForm nicht mehr geöffnet ist
und er sie somit nicht mehr schließen kann.

Kann ich nicht nachvollziehen, ich kriege da keinen Fehler.
Mit Haltepunkt bei ufmListe.Hide hast du überprüft ob das die
Fehlerzeile ist?

Jetzt wöllte ich gern eine If-Then-Abfrage einbauen, der
überprüft ob die UserForm noch geöffnet ist (a la If
„ufmListe.Visible = True Then“). Irgendwie bekomme ich das
aber nicht auf die Reihe. Wer weiß Rat?

Sehe zwar, da ich noch keinen Fehler kriege keine Notwendigkeit, ggfs. vllt. so:
IF UserForms.Count >0 Then

Gruß
Reinhard

Hallo Reinhard,

du versteckst die UF, das wäre Schließen:
Unload ufmListe

stimmt. Die UF soll auch nur versteckt werden, da sie beim (neu)laden immer links oben kommt, während ich sie am Anfang manuell auf eine bestimmte Position bringe (keine der Auswahlmöglichkeiten für UF). Bei „Hide“ bleibt sie dort, bei „Unload“ nicht.

Kann ich nicht nachvollziehen, ich kriege da keinen Fehler.
Mit Haltepunkt bei ufmListe.Hide hast du überprüft ob das die
Fehlerzeile ist?

habe ich noch einmal geprüft, obwohl ich das Ergebnis schon vorher wusste: ja es ist die Zeile; ist ja keine andere im Code-Abschnitt vorhanden :smile:

IF UserForms.Count >0 Then

bingo, genau das hat geholfen.

Danke, Tobi@s

Hallo Tobias,

du versteckst die UF, das wäre Schließen:
Unload ufmListe

stimmt. Die UF soll auch nur versteckt werden, da sie beim
(neu)laden immer links oben kommt, während ich sie am Anfang
manuell auf eine bestimmte Position bringe (keine der
Auswahlmöglichkeiten für UF). Bei „Hide“ bleibt sie dort, bei
„Unload“ nicht.

speicher doch in den Zeilen vor Unload Left und Top, ggfs. auch
Width, Height in Variablen die Excel/Vba auch dem Schließen beim Wiederöffnen noch kennt.

Kann ich nicht nachvollziehen, ich kriege da keinen Fehler.
Mit Haltepunkt bei ufmListe.Hide hast du überprüft ob das die
Fehlerzeile ist?

habe ich noch einmal geprüft, obwohl ich das Ergebnis schon
vorher wusste: ja es ist die Zeile; ist ja keine andere im
Code-Abschnitt vorhanden :smile:

Tja nun, dann, bei gleichem Code gehen wir wohl unterschiedlich vor beim Mappenwechsel o.ä. Ich gehe in XL2000 oben über Fenster—Mappe2.
Du und bei welcher XL-Version?

IF UserForms.Count >0 Then

bingo, genau das hat geholfen.

Echt? *staun* Ich dachte .Count zählt die hidden UFs mit.
Soso verstehe ich es immer noch nicht denn selbst wenn ich
Unload ufmListe
im DeActivate-Code durchführen lasse kommt kein Fehler.

Gruß
Reinhard

1 Like

Hallo Reinhard,

speicher doch in den Zeilen vor Unload Left und Top, ggfs.
auch
Width, Height in Variablen die Excel/Vba auch dem Schließen
beim Wiederöffnen noch kennt.

warum bin ich da noch nicht drauf gekommen … :smile:

Tja nun, dann, bei gleichem Code gehen wir wohl
unterschiedlich vor beim Mappenwechsel o.ä. Ich gehe in XL2000
oben über Fenster—Mappe2.
Du und bei welcher XL-Version?

wir haben auf Arbeit XL2007. Und da habe ich unten gleich auf der Task-Leiste alle geöffneten Dateien / Programme zu sehen. Also ein Klick da drauf und schon ist gewechselt.

LG Tobi@s