UserForm durch CommandButton schließen
Hallo zusammen,
ich habe eine UserForm mit verschiedenen OptionButtos. Durch klicken auf einen CommandButton soll zum einen je nach ausgewähltem OptionButton eine neue UserForm geöffnet werden, dass ist kein Problem, und zum anderen die aktuelle UserForm geschloßen werden. Wie bekomme ich das hin?
Hier der Code, den ich bisher habe:
Private Sub CommandButton1_Click()
If OptionButton1 = True Then
UserForm2.Show
ElseIf OptionButton2 = True Then
UserForm3.Show
ElseIf OptionButton3 = True Then
UserForm4.Show
ElseIf OptionButton4 = True Then
UserForm5.Show
ElseIf OptionButton5 = True Then
UserForm6.Show
ElseIf OptionButton6 = True Then
UserForm7.Show
ElseIf OptionButton7 = True Then
UserForm8.Show
ElseIf OptionButton8 = True Then
UserForm9.Show
ElseIf OptionButton9 = True Then
UserForm10.Show
ElseIf OptionButton10 = True Then
UserForm11.Show
ElseIf OptionButton11 = True Then
UserForm12.Show
End If
End Sub
4 Antworten
Es gibt meine ich kein Close. Versuche es mit Hide.
Dann findest du das Datenobjekt nicht, weil die Methode Hide gehört definitiv zum UserModul. Das habe ich gerade ausgetestet.
Funktioniert Show denn? Wenn ja, wundert es mich, das Hide nicht funktioniert. Vermutlich rufst du Hide am falschen Ort auf, von dem das Objekt nicht referenziert werden kann.
Kannst du das mal in den von mir gescheieben Code einsetzen und mir schreiben?
Private Sub CommandButton1_Click() UserForm2.Show False If Not OptionButton1 Then _ UserForm2.Hide End Sub
Das aufrufende Form musst du noch auf ShowModal=False setzen.
Das ist das Einfachste. Sauberer wäre es natürlich, wenn du irgendwie abfragen würdest, ob schon Show aufgerufen wurde. Vielleicht mit .Visible? Probiere es mal aus.
Werde ich mal probieren.. vielen Dank!
Die korrekte Lösung für das Schliessen lautet:
Unload UserForm2
Set UserForm2 = Nothing (=optional, aber sinnvoll)
Mit dem Befehl Me.Hide rückst du die UserForm nur in den Hintergrund. Sie ist nicht geschlossen! (Ist aber manchmal auch recht nützlich)
An jene, die sagen Me.hide ginge auch: Einfach in einer Schleife die UserForm aufrufen (UserForm2.Show) und per UserForm2.hide in den Hintergrund rücken.
Nach kurzer Zeit hat man dann einen Stapelüberlauf.
Entweder mit .hide oder mit unload [form]
Wenn es das aktive UserForm ist das du schließen möchtest und in dem du den Code ausführst dann mit:
Me.hide oder unload me
Klappt beides nicht..
Wie würdest du es denn rein schrieben? Villeicht mache ich da ja einen Fehler.
Z.b. mit:
Form1.Hide()
oder:
Form1.Close()
oder:
Me.Close
Habe ich schon versucht..
"Fehler beim Komplieren: Methode oder Datenobjekt nicht gefunden"