Excel VBA für Profis: Klassen (Konzepte)

Die Test-Klasse aufrufen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Damit die Test-Klasse aufgerufen werden kann, braucht es eine eigene Test-Prozedur. Darin wird die Klasse mit einer neuen Variablen initialisiert und ausgeführt.

Transkript

Die Klasse ist vorhanden. Ich habe hier ein spezielles Klassenmodul mit diesem Code. Der sieht erstmal aus, wie ganz normaler Modulcode, außer das hier zwei spezielle Prozeduren sind. Aber wenn Sie die außerhalb eines Klassenmoduls schreiben, passiert einfach nichts. Und jetzt brauche ich ein Test für die Klasse. Der muss in einem normalen Modul stattfinden, also ich habe hier bisher nur ein Modul, aber für spezielle Zwecke, deswegen hole ich mir ein normales Modul und das nennen wir einfach "modTesten". Und da müssen Sie mal darauf achten, ob es wirklich offen ist. Zu Note hier mal ein Doppelklick. Dort schreibe ich eine Prozedur, eine ganz normale Prozedur: "subKlassentest", die dient dazu, diese Klasse zu testen. Dann muss ich jetzt mal eine Variable anlegen. Deren Name jetzt ziemlich lieblos ist "dim clsX as" und jetzt gebe ich an den Datentyp, und der Datentyp ist der Name der Klasse. Das gilt übrigens für alle anderen Objekt-Datentypen, die da schon eingebaut sind auch "AddIn", oder was Sie sonst hier finden "AutoCorrect". Das alles sind Klassen. Es fällt einem nur normalerweise so nicht auf. Meine eigene Klasse habe ich deswegen auch mit/zum Traffics versehen, ich kann also einfach "cls" schreiben, daran erkenne ich schon mal meinen eigenen und sehe da es ist ein Datentyp. Das ist also sozusagen die Variablendeklaration, aber Klassen brauchen immer noch einen zweiten Schritt. Jetzt kommt das Initialisieren. Ich habe sozusagen schon mal erwähnt, welchen Stempel ich meine, aber jetzt muss ich auch einmal stempeln. Das muss mit "set" erfolgen, weil es eben ein Objekt ist, eine Klasse, hat wiederum mein eigenen Namen, also diese variable und die ist "=", das ist jetzt der wesentliche Unterschied "new". Jetzt gebe ich wiederum den Datentyp "clsTest" an. Das ist der wesentliche Unterschied bei Klassen, die Deklaration erfolgt, wie für jeden anderen Datentyp auch, aber ich muss anschließend mindestens sagen "set/Klassenname/=/new/Datentyp", und zwar derselbe wie da oben, wenn ich nicht irgendwann noch was verbessere. Ab jetzt kann ich alle Prozeduren, und zwar wirklich jetzt erst kann ich alle Prozeduren dieser Klasse benutzen, und ich muss also immer dazu sagen, welchen Stempelabdruck ich meine. Der Stempelabdruck sozusagen heißt "clsX", das ist die Instanz, die ich erzeugt habe. Wenn ich jetzt hier ein Punkt mache, erscheinen alle öffentlichen Prozeduren oder Funktionen. Also ich kann zuerst "sagHallo" aufrufen, beim Doppelklick auswählen, und dann das andere Variante Function mit "debug.Print" zurückgeben wer ich bin also "Mein Name ist" und dann verkettet mit "clsX.MeinName". Das reicht jetzt schon. Eigentlich musste ich die Klasse noch zerstören, wie das so schön heißt, also "set clsX = Nothing". Das löst das Terminate aus, dass die Klasse jetzt zerstört wird, der Stempelabdruck wird sozusagen wegradiert, tatsächlich können Sie das weglassen, ich lasse es mal so drinstehen, "ist nicht nötig", weil dieses nämlich eine lokale Variable ist, die innerhalb der Prozedur existiert und mit dem "End sub" sowieso automatisch zerstört wird. Also von daher können Sie an der Stelle darauf verzichten, ich lasse es auch mal weg, hier also auch ein Kommentar, damit Sie sehen, dass das Terminate trozdem ausgeführt wird und nach dem speichern DEBUGGEN/"Kompilieren" vorsichtshalber. Gucken wir mal was jetzt alles passiert. Ich führe das einfach mit "F5" aus. Alles schon passiert. Und Sie sehen hier sind ganz viele Meldungen aufgetaucht. Zwei der Meldungen habe ich bewusst ausgelöst. Dieses "sagHallo" macht genau das "Hallo!" und hier steht dann "Mein Name ist: Test-Klasse". Wenn Sie jetzt in der Klasse selber nachgucken, werden Sie sehen, die Übrigen, die hier auch so was ausgelöst hatten, wurden sozusagen unfreiwillig erzeugt. Das "Initialize" und das "Terminate". Das "Initialize" findet an dieser Stelle statt, sobald Sie mit "new" eine Instanz von einer Klasse anlegen, deswegen habe ich es mit "debug.Print" hintereinander schreiben lassen. Wird das Initialize ausgeführt, da kann man so ein Paar Anfangsprogrammierungen reintun, wenn Sie erstmal prüfen müssen, ob dies und das, und jenes da ist, oder andere Klassen anlegen und ähnliches. Das kann ein Benutzer sozusagen nicht verhindern, mit dem "new" wird das ausgeführt. Und das "Terminate" hier, das erzeugt er diese Meldung, wird auch dann ausgeführt, wenn ich nicht explicit diese Klasse schließe, zerstöre, wie immer Sie das nennen wollen, denn mit dem "End sub" wird eine Lokale Variable sowieso zerstört und dann wird auf die Klasse vorher aufgelöst. Das sind die typischen Aufräumarbeiten: Dateien schließen, irgendwas speichern oder was Sie sonst brauchen. So sieht also ein klassischer Aufruf einer Klasse aus, Sie vergeben den Variablen Namen, das ist noch normal, instanziieren Sie hier mit dem "new" Schlüsselwort, und dann dürfen Sie nur noch Unternennung der Instanz, diese Variable representiert die Instanz auf die Inhalt der Klasse zugreifen. Ohne so eine Instanz können Sie auf diese Prozedur oder auch auf diese hier gar nicht zugreifen. Das ist technisch nicht möglich, weil es eben eine Klasse ist.

Excel VBA für Profis: Klassen (Konzepte)

Verbessern Sie Ihren VBA-Code durch Klassenprogrammierung.

1 Std. 35 min (21 Videos)
Derzeit sind keine Feedbacks vorhanden...
Hersteller:
Exklusiv für Abo-Kunden
Erscheinungsdatum:28.03.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!