Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Excel 2016 VBA Grundkurs

Enumeration

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Dank IntelliSense-Ausklapplisten zeigt Ihnen der VBA-Editor beim Programmieren schon für die meisten Gelegenheiten genau an, welche eingebauten Konstanten hier sinnvoll sind. Diese Technik können Sie auch für eigene Konstanten nutzen. Die Lösung dafür sind Enumerationen.

Transkript

Es gibt eine Technik namens Enumerations, die Probleme löst, die Sie vielleicht noch gar nicht gesehen haben. Deswegen möchte ich Ihnen zuerst zeigen, wo Sie das Problem haben, und meistens wird das Problem nämlich gelöst, indem man Zeichenketten vergleicht. Ganz furchtbar. Zum Beispiel, wenn Sie verschiedene Ansichten vorbereitet haben dann speichern Sie die Namen der Ansichten und sagen: Wenn jemand diese Ansicht mit diesem Namen benutzt, dann mache ich das und das. Das geht viel viel besser und eleganter und vor allem sicherer im Code. Das ist das, was ich ihnen jetzt zeigen möchte und zwar am Beispiel der üblichen Message Box. Ich habe eine Prozedur, die nennen wir mal meine Supermeldung. So super ist die nicht, aber die soll nicht gleichnamig mit anderen Prozeduren sein, und die hat einen Parameter für den Text As String und da drin steht dann die übliche banale Message Box und die zeigt jetzt hier nur den StrText an. Und Sie sehen schon: da gibt es weitere Argumente. Und dieses Buttons Argument ist nicht ganz schlau benannt, denn es beschreibt nicht nur die Buttons, also die Schaltflächen, sondern auch die Symbole, Icons und die Vorauswahl und Ähnliches. Also wenn ich jetzt mit Komma weiter gehe, klappt dort eine wunderbare Liste auf. Das ist eine Enumeration, kann ich schon mal erwähnen, und dort will ich jetzt vbInformation aufrufen. Und dadurch, dass ich hier eine Listenauswahl kriege, kann man nicht falsch gehen. Ich kann das mit Doppelklick oder Tab Taste auswählen. Und nebenbei, der Compiler, wenn ich das jetzt kompilieren lasse, prüft das auch noch mal, wenn ich da also Plural rein mache, dann sagt der mir anschließend, muss ich natürlich erst mal die Zeile verlassen, dann sagt er mir anschließend: das kennt er nicht. Also daher die Sicherheit, ich kann auswählen und wenn ich es auch noch falsch schreibe, werde ich auch noch drauf hingewiesen. Das ist das, was Enumerations später ausmachen wird. Ich bekomme auch für meine eigene Auswahl eine beliebige Liste angeboten und die ist prüfbar, und nicht wie Zeichenkettenvergleiche, das da irgend etwas drin stehen darf. Das ist sozusagen der Normalfall. Wenn ich die Supermeldung aufrufen würde, dann sehen Sie da oben: da sollte das funktionieren. Ich mach dann mal kurz meine Supermeldung und da steht völlig banal Test drin und Sie sehen hier: weißes i in blauem Kreis, das ist vbInformation und da steht der Inhalt: Text. Soweit alles in Ordnung. Jetzt möchte ich einen zweiten Parameter aufnehmen. Und da geht es los: ich möchte nämlich hier dieses variabel halten. Dazu muss ich erst mal rausfinden, was das denn eigentlich für einen Inhalt hat. Das können wir hier direkt abfragen. vbInformation mit Return ausführen lassen. Da ist ja ein Fragezeichen davor. Dann bekomme ich den Wert 64. Und darauf kann ich ungefähr vermuten: wahrscheinlich ist es ein Integer Wert. Also erfinde ich hier Integer Icon as Integer, und genau das soll dann hier benutzt werden. Und das Problem geht los, wenn ich das irgendwo im Code brauche. Ich nenne das mal einfach: TestemeineSupermeldung und dort rufe ich dann auf MeineSupermeldung. Das Erste ist einfach. Den nennen wir mal wieder Test. Und jetzt nach dem Komma erwarte ich eigentlich eine Liste, die ausklappt. Und dann kommt keine Liste. Kann auch nicht. Der Datentyp Integer sagt: hier können Sie schreiben was Sie wollen. Ich könnte natürlich die Zahlen von -32000 bis +32000 anzeigen, das hilft aber auch nicht wirklich. Ich muss jetzt also hier entweder die 64 schreiben oder wissen, dass ich eine Konstante wie vbInformation benutzen darf und die hier eingeben. Das ist das Problem. Ich habe hier eigentlich eine Liste von Möglichkeiten und die kriege ich nicht angeboten. Das ist, sagen wir es freundlich, lästig. Deswegen werde ich das hier kommentieren. So würden Sie das wahrscheinlich normalerweise machen und das bringt es nicht. Aber wir können das trotzdem schon mal rauskopieren. Das werde ich nämlich gleich in veränderter Form schreiben. Hier ist es kommentiert, deswegen darf das durchaus noch mal vorkommen. Hier kann ich wieder die Kommentare aufheben. Der Haken liegt hier: intIcon ist zu nichts sagend sozusagen. Wir können ja mal das Original fragen. Wenn ich jetzt hier nämlich weg nehme und noch mal das Komma eingebe, dann sehen Sie hier einen Datentyp. Oder genauer gesagt, eine Enumeration. Das heißt, dieses Ding hier hat die Enumeration vbMessageBoxStyle. Jetzt kann ich es wieder hier hin schreiben. Das war nur zum nachschauen. Also intIcon As vbMessageBox Style. Und deswegen sollte das Ding hier dann auch besser so heißen. Und jetzt kommt wieder der Aufruf. Das können wir auch erst mal hochkopieren. Mit gedrückter Strg Taste. Dann hier wieder die Kommentare entfernen. Und der spannende Teil ist hier hinten. Bis hierhin war alles gleich und jetzt mache ich ein Komma und siehe da, da ist die Liste. Es war also lediglich das Problem, dass Integer völlig unbestimmten Datentyp nehme und ersetze durch eine Enumeration, das ist eine Mischung aus Datentyp und Liste. Irgend jemand hat also eine Liste erstellt, und vorbereitet, wen ich diesen Datentyp benutze, dass dann diese Liste erscheint. Und hier steht jetzt auch wieder vbInformation drin. Das ist super. Können Sie also auch für eigene Parameter hier benutzen, aber ich hätte die Liste gerne kürzer. Da stehen nämlich, ich werde die noch mal anzeigen, da stehen nämlich nicht nur die Icons drin, die sind nur ein bisschen versteckt da drin vbCritical, zum Beispiel, vbInformation, vbExclamation, vbQuestion, sondern das stehen auch zum Beispiel die Schaltflächen. Wenn ich da was auswähle, was die Schaltflächen betrifft, das will ich gar nicht zulassen, dann beeinflusst das ebenso die Darstellung des Dialogs. Also vbInformation ist schön, aber ich hab zu viel Auswahl. Ich will sie also selber vorgeben. Und jetzt kommt die Enumeration ins Spiel. Die beginnt mit dem Schlüsselwort Enum. Und ich kennzeichne die immer im Namen auch mir enm. und ich sage: da will ich die Icons sehen. Und irgendwo das End Enum. Und hier zwischen kommt die Auflistung, die später erscheinen soll da es eine Enumeration für die Icons ist, werde ich die jetzt mit Icon kennzeichnen, und ich schreibe die in Englisch, weil die Originale auch englisch sind. Wenn ich kein Icon haben will, kein Bild, dann finde ich ein Icon None. Jetzt gebe ich einfach die Liste vor: Information Icon, was haben wir noch, Exclamation, Icon Question. Die Reihenfolge ist relativ egal. Icon Critical. Das sind die vier Bilder. Und diese Liste will ich benutzen. Also das hier werde ich erstens kopieren und hier natürlich wegkommentieren, damit es mir nicht in die Quere kommt, und hier nehme ich jetzt meinen eigenen Datentyp. Also As enmIcons. Deswegen muss ich das hier auch entsprechend umbenennen Muss ich nicht, aber sollte ich schon, dass es zusammengehört. Das bedeutet, ich benutze nicht die Originalliste, vbMessage Box Style sondern meine eigene, die aber den selben Prinzipien folgt. Jetzt nehme ich hier wieder weg. Ich tue so, als ob dieses Stück Code wieder neu schreibe. Und nach dem Komma sehen Sie: perfekt. Sie haben genau die Liste von da oben. Sie können sich einen auswählen und zwar nicht die lange Liste sondern die kurze und es verhält sich erst mal genau so, wie ich es erwarte. Leider erst mal nur syntaktisch. Das ist ja schon mal was aber zumindest der Form ist Genüge getan, wenn auch noch nicht dem Inhalt. Ich nehme das hier unten mal wieder raus. Wir testen das einfach mit F5. Und Sie sehen, weit und breit kein Icon. Von wegen Exclamation oder Information oder so etwas. Dafür sehen Sie zwei Schaltflächen. Bei denen es übrigens egal ist, welche Sie anklicken. Es wird nicht ausgewertet. Also irgend etwas klappt da noch nicht. Und das, was nicht klappt, ist der Wert, der dahinter steckt. Wir können ja mal eben fragen. vbInformation also Fragezeichen vbInformation mit dem Return sagt mir, hat den Wert 64. Und mein eigenes Icon Information, dumm gelaufen, hat leider den Wert 1. Weil nämlich, wenn Sie eine Enumeration erzeugen, das erste den Wert 0 bekommt, das zweite den Wert 1, 2, 3, 4. Aber die Originale haben leider nicht die Werte 0, 1, 2, 3, 4. Also der erste, tatsächlich, hat den Wert 0. Wenn Sie nichts eingeben, ist 0 richtig. Aber Information hat die Nummer 64. Sie dürfen das dahinter schreiben. Sie können jeden beliebigen, mit einer Zahl versehen. Dann würde jetzt gezählt: 0, 1, 99, 100, 101. Das heißt, der zählt weiter. Ich will aber bestimmte Zahlen haben. Die 0 ist korrekt. Aber hier zum Beispiel möchte ich, dass er den Wert von vbInformation übernimmt. Dann schreibe ich das einfach dahinter. Da den Wert von vbExclamation. vbQuestion. Das ist sozusagen einfach nur weitergereicht. vbCritical Und jetzt kann ich hier noch mal nachfragen. Also Icon Information mit dem Return hat tatsächlich auch den Wert 64 und die anderen ebenso. Ich hab die also sozusagen nur umbenannt und in eine eigene Liste gepackt. Aber sie halten sich an die Originaldaten. Und wenn ich jetzt, ich kann hier noch mal prüfen, dass das funktioniert, wenn ich jetzt programmiere, dann bekomme ich jetzt wie gewohnt, meine eigenen und trotzdem, wenn ich das mit F5 starte, verhält er sich so, wie das Original, es ist also wirklich vbInformation hinterlegt. Damit haben Sie eine Menge gewonnen. Sie können programmieren und Code vorgeben, der dafür sorgt, wenn Sie diesen Code aufrufen, diese Prozedur, dann steht da eine Auswahl in Konstanten drin. Sie können sich also nicht verschreiben. Sie ist vorgegeben die Auswahl. Der Compiler prüft die auch. Wenn ich jetzt also hier etwas Ungültiges erfinde, mit einem s hinten dran, dann mit debuggen kompilieren lasse, dann bekomme ich direkt die übliche Fehlermeldung: das Ding kenne ich nicht. Mit Strings, Zeichenketten, in die Sie Texte reinschreiben, die Sie wiedererkennen, funktioniert das nicht. Also Enumerations sind dafür gedacht, dass sie entweder Originale ersetzen. Dafür müssen Sie den Datentyp der Enumeration erst mal nachschauen oder auch eigene Listen erfinden. Dann kann der Teil hier wegfallen, wenn Sie eigene Listen erfinden. Die ist dann häufig 0, 1, 2, 3, 4 durchnummeriert. Das macht geringfügig mehr Arbeit, macht aber erheblich mehr Spaß beim Programmieren.

Excel 2016 VBA Grundkurs

Lassen Sie sich systematisch in die Excel-Programmierung mit Visual Basic for Applications (VBA) einführen.

7 Std. 25 min (66 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Exklusiv für Abo-Kunden
Ihr(e) Trainer:
Erscheinungsdatum:30.08.2016
Laufzeit:7 Std. 25 min (66 Videos)

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!