Eine erste Klasse erstellen
Klassen initialisieren und terminieren
Da sich diese Beispielklasse ausnahmsweise beim Erzeugen in Class_Initialize und Zerstören in Class_Terminate per MsgBox meldet, sehen Sie, dass mehr passiert, als Ihr selbstgeschriebener Code vermuten lässt. Mit dem Schlüsselwort New wird die Klasse erzeugt und also Class_Initialize ausgeführt. Wenn es aber darin nichts zu tun gibt, können Sie diese Prozedur ebenso gut weglassen wie Class_Terminate.
Da Sie oben ja eine lokale Variable Test angelegt haben, muss diese vor End Sub zerstört werden. Dabei wird zwangsläufig Class_Terminate ausgeführt, wie Sie an der Meldung sehen. All diese in der Mini-Version eher beliebigen Aktionen können Sie selbstverständlich auch gezielter einsetzen.
Um den kompletten Aufruf aller Möglichkeiten dieser Klasse zu sehen, schreiben Sie in einem normalen Modul den folgenden Code:
Sub AufrufEinerKlasseKomplett() Dim Test As Klasse1 Set Test = New Klasse1 MsgBox "Ich habe '" & Test.MeinName() & "' aufgerufen.", _ vbInformation, "Aufruf der Klasse" Test.SagHallo Set Test = Nothing End Sub
New schon bei der Deklaration?
Wie Sie sehen, kann New nicht nur bei der Deklaration, sondern auch noch später aufgerufen werden. Ohne New können Sie nicht auf die Inhalte der Klasse zugreifen, denn dann existiert ja noch nicht der "Stempelabdruck".
Sie sollten unbedingt immer diese zweite Variante wählen, also New explizit später nach der Deklaration aufrufen. Beim Testen der folgenden Prozedur NewFalsch sehen Sie, welches Problem auftritt, wenn die Klasse wie im ersten Beispiel sofort mit New deklariert wurde.
Sub NewFalsch() Dim Test As New Klasse1 If Test Is Nothing Then MsgBox "Test existiert noch nicht." Else MsgBox "Test existiert schon!" End If End Sub
Obwohl die Klasse Test in NewFalsch noch nie zugewiesen wurde, holt VBA das intern automatisch nach, wenn der erste Zugriff darauf erfolgt. Der findet aber leider schon bei der Prüfung auf deren Existenz mit Is Nothing statt, die also zum falschen Ergebnis kommt, dass die Klasse bereits geöffnet sei.
Sub NewRichtig() Dim Test As Klasse1 If Test Is Nothing Then MsgBox "Test existiert noch nicht." Else MsgBox "Test existiert schon!" End If Set Test = New Klasse1 If Test Is Nothing Then MsgBox "Test existiert noch nicht." Else MsgBox "Test existiert schon!" End If End Sub
Bei NewRichtig kommt die Prüfung zum richtigen Ergebnis, denn die Existenz-Meldung kommt erst nach der geplanten Zuweisung mit Set.
Auch das Zerstören der Klasse und damit die Prozedur Class_Terminate können Sie bewusst aufrufen, indem Sie der Variablen den Wert Nothing zuweisen. Das hat aber nicht so gravierende Folgen wie ein New. Sie können es im Grunde auch weglassen, weil mit dem End Sub die lokale Variable Test ja sowieso zerstört wird. Dabei wird dann spätestens das Class_Terminate ausgelöst.
Dies ist eine Leseprobe
Möchten Sie den Beitrag komplett lesen? Dann werden Sie Probemitglied und testen Sie akademie.de 14 Tage kostenlos!
Auf VBA-Programmierung mit Klassen erfahren Sie mehr über diesen Beitrag und die weiteren Leseproben.
Weitere Informationen finden Sie auf unserer Infoseite zur Mitgliedschaft und in unseren AGB.
Ich bin bereits Mitglied