Visual Basic Userforms hintereinandergeschaltet

Hallo miteinander,

ich arbeite mit Offce 2007. Ich will in Visual Basic eine Eingabe über mehrere Userforms tätigen. Von Userform zu Userfom gehe ich über einen Button, dieser schreibt die eingebenen Werte in das Excel Sheet, ruft die nächste Userform auf und soll die aktuelle Userform schließen. Das mit dem Schließen will allerdings nicht ganz funktionieren… habs mit unload userform1, unload me schon probiert aber komme nicht weiter. Hier mal der Code:
Private Sub cmb1_Click()

Rem***Schreiben der Werte in die Tabelle
Tabelle1.Cells(2, 10) = txt_km
Rem*** Öffnen/Schließen der US Form
UserForm2.Show
Unload Me

End Sub

Will dann in den nachfolgenden Userforms auch noch ein Zurück Button einfügen, da bräuchte ich dann logischerweise auch das Schließen…

Private Sub cmb2_Click()
Rem**ZurücK Taste
UserForm1.Show
Unload UserForm2

Wäre echt super wenn mir jemand weiterhelfen könnte!

Vielen Dank im Vorraus
Steffen

Hallo Scheteffen.

Hört sich nach einem Wizard an. Theoretisch könntest Du dafür auch eine einzige Userform benutzen, der Du mehrere Frames hinzufügst und dann mit den Buttons die Visible-Eigenschaft oder die ZOrder-Eigenschaft der Frames manipulierst. Dann kommt man auch besser mit dem „Zurück“ klar.

Aber zu Deiner eigentlichen Frage. Statt die Userform mit ‚Unload Me‘ in der Userform selbst zu entladen, könntest Du sie mit Me.Hide vorerst nur unsichtbar machen und nach dem Aufruf der nächsten UserForm dann dort entladen. Vielleicht klapp das ja besser.

Ich weiß natürlich nicht genau, wie Du Deine UserFormen lädst. Ich vermute mal mit „UserForm1.Show“

Eine andere Methode geht folgendermaßen:

Dim Form as New UserForm1
Form.Show
Set Form = Nothing

Ein wenig problematisch wird’s mit dem Entladen eigentlich sowieso, denn wenn Du die UserFormen entlädst, dann werden (soweit ich das richtig weiß) auch alle Werte darin gelöscht. Wenn Du aber in der nächsten UserForm auf „Zurück“ klickst, dann sollten ja die vorher eingetragenen Werte eigentlich noch vorhanden sein (denke ich doch 'mal). Daher wäre es ja eigentlich einfacher, die Formen mit Me.Hide nur zu unsichtbar zu machen und erst nach Abschluß der gesamten Abfrage- und Eingabeprozedur dann alle zu entladen.

VG
Carsten

Hallo Carsten,
erstmal vielen Dank für deine schnelle Hilfe. Zunächst zu deiner Frage ja, ich lade die Userformen mit dem Befehl userform.show.
Das Problem liegt bei dem Zurück Button! Das hat auch leider nicht mit Me.Hide funktioniert, da ich ja dann im Prinzip mit dem Zurück Button nochmals den Befehl show.Userform1 gebe obwohl diese ja noch geöffnet ist! Gibt es auch so ein Befehl wie „unhide“ etc. ???
Hier mal der Code meiner zurück Taste in der Userform2
Rem**ZurücK Taste
UserForm1.Show
Unload UserForm2

Das Problem das die Daten ja beim Schließen der US weg wären, habe ich (denke ich mal :smile:) damit gelöst das ich im „weiter“ Button die eingegebenen Werte
in die Excel Tabelle schreibe…
Rem***Schreiben der Werte in die Tabelle
Tabelle1.Cells(2, 11) = cob1
Tabelle1.Cells(2, 12) = txt_liter
Tabelle1.Cells(2, 13) = txt_steuer
Darum wäre es mir auch relativ egal ob die Werte bei erneuter Eingabe in den Txt Feldern angezeigt werden oder nicht!

Also wenn du noch ein paar Tricks auf Lager hättest…
Wäre dir echt dankbar !
Lieber Gruß
Scheteffen

Hallo Scheteffen.

Das Problem liegt bei dem Zurück Button! Das hat auch leider
nicht mit Me.Hide funktioniert, da ich ja dann im Prinzip mit
dem Zurück Button nochmals den Befehl show.Userform1 gebe
obwohl diese ja noch geöffnet ist! Gibt es auch so ein Befehl
wie „unhide“ etc. ???
Hier mal der Code meiner zurück Taste in der Userform2
Rem**ZurücK Taste
UserForm1.Show
Unload UserForm2

Der Befehl „UserForm.Show“ führt eigentlich nur dazu, daß die Form angezeigt wird. Ist die UserForm beim Aufruf des Show-Methode noch nicht geladen, dann wird sie geladen, weil Du sie angesprochen hast.
Du kannst eine UserForm mit dem Befehl „Load UserForm1“ auch erst laden, dann schon Werte eintragen und sie danach erst mit der Show-Methode sichtbar machen. (Insofern ist es mir sogar ein wenig schleierhaft, warum es „Show“ und „Hide“ gibt, denn dieselben Funktionen könnte man ja auch mit Änderung der „Visible“-Eigenschaft hinbekommen).

Du mußt es tatsächlch so machen:

'In UserForm1, Weiter-Button

 Dim Form As New UserForm2
 Form.Show
 Set Form = Nothing
 Unload Me

'In UserForm2, Weiter-Button

 Dim Form As New UserForm3
 Form.Show
 Set Form = Nothing
 Unload Me

'In UserForm2, Zurück-Button

 Dim Form As New UserForm1
 Form.Show
 Set Form = Nothing
 Unload Me

Hoffe, daß hilft Dir weiter.

VG
Carsten