Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Excel VBA für Profis: Klassen (Konzepte)

Die Klassen-Schnittstelle aufrufen

Testen Sie unsere 2021 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Dank der abstrakten Klasse ist es endlich möglich, auch verschiedene Klassen in einer SelectCase-Struktur auszutauschen.

Transkript

Mit der Änderung, dass die Klassen eine gemeinsame Schnittstellen haben, haben Sie sich erst mal natürlich nur Arbeit eingehandelt. Auf den ersten Blick denkt man, was ist jetzt eigentlich besser? Ich habe hier in den Klassen eine Implements-Anweisung, die nicht nur dafür sorgt, dass sich jetzt die Prozedurnamen hier verändern, sondern die vor allem dafür sorgt, dass ich auch hier alles noch ändern musste, aber das war die entscheidende Änderung. Diese haben jetzt plötzlich den gleichen Datentyp. Der Deklarationsdatentyp ist die abstrakte allgemeine Klasse. Und die New-Zuweisung funktioniert jetzt mit der konkreten Klasse. Und das war die entscheidende Änderung, dass ich das jetzt zusammenfassen kann. Ich nehme mir mal eine von diesen als Beispiel. Die kann ich anschließend löschen, wenn ich aufgeräumt habe. Teste Klasse "Allgemein" und dort möchte ich jetzt wechseln können. Damit das einigermaßen vernünftig geht, macht man das mit einer Enumeration. Ich könnte jetzt natürlich mit einem String sagen, wenn in dem String "CSV" steht, dann passiert dies und jenes. Ich sage ganz ehrlich, das gehört sich nicht. Das ist schlampige Programmierung, also hier kommt eine Enumeration. Und damit die überall sichtbar ist eine Public-Enumeration natürlich. Die heißt bei mir zum Beispiel "enmQuelle". Das Präfix sagt mir, ich bin eine Enumeration und da das "enum". Eine Enumeration ist ja nichts anderes, als sagen wir mal eine Sammlung von Konstanten, die automatisch erzeugt werden, aber die in einer Gruppe stehen. Das macht sie während der Entwicklungszeit viel, viel angenehmer. Und die heißen bei mir dann irgendwie so, für Quellen "que". Dann kann ich die auch noch unterscheiden. Und ich nenne jetzt hier einfach alle Varianten, die mir so einfallen. Reihenfolge ist auch völlig Wurscht. Und wenn ich eine neue Datenklasse erfinde, würde ich Enumeration einfach um eins ergänzen. Das steht deswegen in "modVarKonstDLL", weil das so allgemeine Variablen-Konstanten DLLs hier gar nicht sind. Der Teil ist erledigt und jetzt kann ich hier nämlich hingehen und sagen, diese allgemeine Klasse kriegt etwas übergeben. Das nennen wir dann vielleicht "queTyp", der Quellentyp "as" und jetzt nenne ich meine Enumeration. Das hat den Vorteil, dass ich später, wenn ich tatsächlich "TesteKlasseCSV" besser erfinde und dieses "TesteKlasse" allgemein aufrufe und jetzt das Argument übergeben muss, sehen Sie vielleicht wegen des Quickinfos nicht ganz perfekt, da kriege ich diese drei angeboten. Und für "CSV" rufe ich hier "CSV" auf und bin fertig. Das ist lesefreundlich. Sie haben als Entwickler keine Probleme, dass Sie sich irgendwie vertippen. Und das muss ich jetzt hier nur untersuchen, wenn, da ist ja eine der Änderungen, mit "select case". Ich untersuche "select case" den Typ und denkönnen wir schon ein bisschen einrücken. Wenn es der "case queCSV" ist, dann setze ich "clsX" auf "clsDatenCSV". Das ist das Wesentliche. Ich schreibe schon mal "end select" hin. Das ist alles noch nicht ganz perfekt, aber das ist die Idee dahinter. Dann kann der Rest hier wegfallen. Ich muss nur gucken, wo sind die Unterschiede. Zum Beispiel der zweite Unterschied ist hier in der Endung, also brauche ich eine Variable "dim strEndung as String" und das Zweite, was ich dann mache, ist "strEndung= "csv" ". Und hier hänge ich also "strEndung" dran. Hier beschreibe ich die Unterschiede und da passiert dann überall das Gleiche. Und das muss ich jetzt nur in verschiedenen Varianten wiederholen. Also "CSV" haben wir, dann kommt "Access". Wenn Sie übrigens nicht mehr wissen, wie diese Enumeration genau heißt, dann schreiben Sie einfach den kompletten Namen und dann erscheinen nach dem Punkt dort die möglichen Ausprägungen, deswegen versehe ich die mit so einem Präfix "que", dann weiß ich, das sind meine Quellen. Aber, wenn Sie das nicht machen wollen, dann müssen Sie den Enumeration-Namen immer dazuschreiben. Ich lasse das mal hier drin stehen. Das ist die Kurzform und das ist ausführlich. Dann muss natürlich dann hier auch die Ausprägung für "Access" drin stehen und die passende Endung. Nehmen wir die Kurzform. Das sollte in den meisten Fällen funktionieren. Und da haben wir "Ecxel". Also auch hier "Excel" und Sie merken schon, das ist im Wesentlichen Fleißarbeit. Wenn eine neue Klasse hinzukommt, kommt hier zu ein Päckchen dazu, so ein case und alles ist gut. Mehr müssen Sie nicht machen. Jetzt sind diese Teile hier, die kann ich jetzt mal großflächig kommentieren, schon überflüssig. Und jede neue Klasse heißt einfach nur, so eins brauchen wir mehr. Einen konkreten, der also jetzt hier auf "Access" zum Beispiel wechselt und deswegen hier "aqea". Mit Steuer- und Leertaste finde ich dann das komplette Wort sacht, dass es bitteschön um "Access" geht. Der Rest passiert hier drin und neue Klasse heißt also, ich muss eine von dieses Prozeduren haben, dann die passende Enumeration. Die habe ich aber schon und dann hier entsprechend so ein Dreierpack. Wenn ich jetzt die Klasse "Daten Outlook" erfinde, um das auch noch auszulesen, dann brauche ich einen vierten hier. Bei der Enumeration noch einen neuen Eintrag. Und wo haben wir es? Da muss ich dann "case queOutlook" und so weiter ergänzen. Das ist eigentlich schon alles. Jetzt müssen wir nochmal gucken, ob es denn auch funktioniert. Kompilieren lässt es sich. Mit "Steuerung G", kann ich den Direktbereich sichtbar machen und dann ist der erste Versuch mit "F5". Da sind die Daten aus der "CSV" mit "F5". Da sind die Daten aus "Access" und mit "F5". Das dauert nur ein bisschen länger, weil man hier das Öffnen in Excel sieht. Da sind die Daten aus Excel. Also aus den drei Klassen aufrufen, die hier sehr umfangreich werden können. Das ist ja nur so eine Minimalform, was ich da mache. Es ist viel besser eine einzige Zentrale Prozedur zu machen und die dann nur noch mit verschiedenen Typen aufzurufen. Der Hauptknackpunkt dabei war, dass ich hier einen neutralen Datentyp brauche und für den braucht es diese abstrakte Klasse, die nachher mit "implements" genutzt wird. Und die ist nichts anderes, als die Kopie einer konkreten Klasse ohne Inhalte. Das sind wirklich nur Signaturen und zwar auch nur die öffentlichen. Es gibt weitere zusätzliche, abgesehen hier von den Variablen, weitere zusätzliche private Prozeduren. Die sind in allen diesen Klassen erlaubt. Aber die öffentlichen müssen gleich sein. Und dann kann ich diese allgemeine Klasse als Datentyp benutzen und erst wenn es ans Eingemachte geht, sozusagen wenn die wirkliche Zuweisung kommt, dann ist die konkrete Klasse gefragt. Und das erlaubt endlich so eine Select-Case-Struktur.

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...
 

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!