Autor: Peter Haserodt  --- Aus Excel VBA - Gruppe: Tutorials

Userform Unload kann Userform starten - und andere Nickligkeiten

Autor: Peter Haserodt - Erstellt: --      - Letzte Revision: --
Ein wahrlich komischer Titel.

Aber man sollte diesen nicht auf die leichte Schulter nehmen.
Was wirklich dahinter steckt, möchte ich Ihnen im folgendem erklären.

Zuerst brauchen wir eine kleine Testumgebung - eine Testuserform und ein Modul.
Die Testuserform heißt ganz einfach Userform1 und hat einen CommandButton1
Unser Modul einfach Modul1
Erstellen Sie das ganze wie folgt:



' **************************************************************
'  Modul:  UserForm1  Typ = Userform
' **************************************************************

Option Explicit
	
Private Sub CommandButton1_Click()
	Unload Me
End Sub
	
Private Sub UserForm_Initialize()
	MsgBox "Initialize"
End Sub
	
Private Sub UserForm_Terminate()
	MsgBox "Terminate"
End Sub
	



' **************************************************************
'  Modul:  Modul1  Typ = Allgemeines Modul
' **************************************************************

Option Explicit
	
Public Sub TesteDieForm()
	UserForm1.Show
End Sub

Unsere Prozedur TesteDieForm wird uns durch dieses ganze Tutorial begleiten und sich immer wieder ändern.

Dieser Aufruf ist jedem bekannt, der sich mit Userformen beschäftigt.
Uns interessiert aber, was wird abgearbeitet.

Der Code sollte selbsterklärend sein, wichtig ist immer nur die Abfolge von den Informationen:
Initialize
- Die Userform wurde initialisiet
Terminate
- Dies Userform wurde terminiert (und sauber beendet)

Nach Ausführen userer Startprozedur läuft alles ab, wie erwartet:
Es wird initialisiert und nach beenden (durch den CommandButton oder ...) terminiert.

Wir fangen an ein wenig zu spielen.
Ändern wir unser Startprozedur wie folgt:
	
Public Sub TesteDieForm()
	Unload UserForm1
End Sub

Uups - was passiert hier?

Wer hätte dies erwartet?
Ich unloade und das Initialize wird gefeuert.
Überrascht?
Aber immerhin wird auch noch terminiert.

Treiben wir es etwas auf die Spitze und ändern in:
	
Public Sub TesteDieForm()
	MsgBox UserForm1.Name
End Sub

Wahnsinn - Wir haben doch gar nichts gemacht - und trotzdem !
Viel schlimmer aber ist, dass unser UserForm nicht terminiert wurde.

Wie Excel hier selbst irgendwie aufräumt ist mir unbekannt - in VB wäre das schon sehr unschön.
Irgendwo schwirrt die noch rum, oder?

Ändern wir noch ein wenig:
	
Public Sub TesteDieForm()
	MsgBox UserForm1.Name
	MsgBox "Nur als Zwischeninfo"
	Unload UserForm1
End Sub

Jetzt läuft es alles seine geregelten Bahnen - oder?

Die Essenz:


Jeder Zugriff auf eine UserForm, egal welcher Art, lädt die UserForm, wenn diese vorher noch nicht geladen war.
Dies ist absolut wichtig zu verstehen.

Einfach mal ein Unload schreiben oder irgendwas von einer Userform ausnutzen löst immer ein Initialize aus,
wenn die UserForm noch nicht geladen ist.
Selbst das Entladen !!!


Weitere Artikel der Gruppe: Tutorials Aus Excel VBA
Nach oben