Autor: Peter Haserodt --- Aus Excel VBA - Gruppe:
TutorialsUserform 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