Excel 2013 VBA Grundkurs

Enumeration

Testen Sie unsere 1957 Kurse

10 Tage kostenlos!

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

Transkript

Kennen Sie eigentlich Enumerations? Nein? Das ist schade. Damit können Sie Probleme lösen, die Sie wahrscheinlich noch gar nicht entdeckt haben. Aber ich will schon mal vorbeugend zeigen, was sich da rausholen lässt. Es fängt an mit einer ganz harmlosen Prozedur Sub Beispiel, die, wie schon oft gesehen, eine Message Box aufruft, die einen Test-Text hat. Und dahinter irgendwie ein Bild, vbInformation z.B. Und dieses Mal geht es mir darum, dass ich den zweiten Parameter, wenn ich ihn aufrufe, mit einer Liste verbunden habe. Ich sehe hier also direkt, was ich machen kann. Wobei das auf alle die vielleicht nicht besonders lesefreundlich ist, manche sind Bilder, manche sind Voreinstellungen, manche sind Schaltflächen. Aber nehmen wir ruhig vbInformation. Dann wird nachher ein kleines "i" angezeigt. Ich kann das nach dem Speichern einmal eben mit F5 starten. Da ist das kleine "i" und da ist der Test-Text. Soweit, so normal. Der Vorteil der Message Box ist: sie bietet für den zweiten Parameter direkt die passenden Inhalte, die passenden Konstanten an. Das möchte ich jetzt für ein eigens programmiertes ebenfalls haben. Ich schiebe den mal nach unten vor mir her. Also, eine Sub MeinBeispiel soll Parameter übergeben können. z.B. erstens den Text strText As String. Und das Nächste können wir gleich schon machen. Jetzt geht es los, jetzt möchte ich dieses Bild, dieses Symbol anzeigen. Ich vermute mal, es ist ein Integer-Wert, also intIcon As Integer. Wenn Sie wenigstens den Wert rauskriegen wollen, fragen Sie doch mal einfach. Hier, im Direktbereich mit Fragezeichen vbInformation. Und mit dem Return sehen Sie: "Aha, dahinter steckt auch mal die Zahl - 64". Das ist im Integer-Bereich, also haben wir gute Chancen. Dieser MeinBeispiel-Code... (ich werde den schon mal durchnummerieren, weil es nachher mehrere Versionen gibt) ...greift jetzt auf die Message Box zurück, übergibt ihr den Text und an der zweiten Stelle den Inhalt von intIcon. Sie sehen schon intIcon ist nicht Element dieser Liste, weil es da nicht definiert war. Aber ich weiß, ich werde nachher eine sinnvolle Zahl, sagen wir 64 oder so, übergeben, dann passt das schon. Also Sie können ignorieren, dass es in der Liste fehlt, einfach mit Escape die Liste zumachen. Dann sollte das so funktionieren. Und das teste ich jetzt. Also, Sub TesteMeinBeispiel01. Und da drin rufe ich MeinBeispiel auf. Und nach dem Leerzeichen (es ist ja eine Prozedur), gebe ich zuerst den Text an. Also, Test01 nenne ich das. Und nach dem Komma erwarte ich jetzt, wie bei der Message Box, dass da eine Liste ausklappt. Und wie Sie sehen, sehen Sie nichts. intIcon ist eine einfache Integer-Variable. Die denkt im Traum nicht daran mir jetzt eine Liste anzubieten. Ich muss selber raten, dass ich da entweder die 64 eingebe, oder ein vbInformation. Und wenn ich das mit Strg + Leertaste erzwinge, wie hier, dann kriege ich alle Konstanten dieser Welt angeboten, von denen ich jetzt die Richtige rausfinden muss. Immerhin, einmal speichern, funktioniert es. Wenn ich jetzt mit F5 aufrufe, sieht aus wie vorher, ist über den Umweg meiner eigenen Prozedur. Ich mache hier mal ein bisschen Abstand. Dieses Zusammenspiel, das ist meine Prozedur, das ist nur der Testaufruf. Immerhin, funktioniert es. Aber was unbrauchbar ist, diese Anzeige fehlt. Wenn Sie sich die Original-Message Box nochmal angucken... Ich nehme das hier mal eben weg, Komma auch weg und jetzt das Komma nochmal einfügen. ...dann sehen Sie hier, das zweite Argument hat einen Datentyp. Er heißt VbMsgBoxStyle. Der liefert offenbar diese Liste. Also, kann ich an der Stelle ein bisschen nachbessern, indem ich sage: der Datentyp ist nicht erst Integer, sondern als VbMsgBoxStyle. Entsprechend werde ich das hier umbenennen, auch da. Und tatsächlich, wenn ich jetzt hier hingehe und sage: "Ich hätte gerne das Argument". Da klappt die Liste aus. Das ist die Originalliste, die auch bei der Message Box erscheint. Also, eigentlich schon alles super. Da kann ich mich jetzt bedienen und sagen: "Aha, vbInformation ist erlaubt, nehmen wir". Soweit, so nett. Das sind übrigens intern schon Enumerations, auch wenn ich noch gar nichts dazu gesagt habe. Aber ich möchte eigentlich sinnvollerweise beim Aufruf meiner Prozedur nur erlauben, die vier Symbole anzubieten. Nicht die Schaltflächen wechseln oder sonst was, sondern nur die vier Symbole. Also, muss ich eine eigene Liste aufbauen. Und damit sind wir bei den Enumerations. Enumerations ist nichts anderes als das Schlüsselwort mit einem Bezeichner. Den nenne ich mal enmIcons. Und End Enum. Und alles was dazwischen steht, wird, mit Integer übrigens, durchnummeriert. Da ich eine Icons-Auflistung habe, versehe ich die mit dem entsprechenden Präfix, z.B. "None". Ich halte mich mal and das englische Original, Sie werden gleich sehen warum. Und icnInformation, icnQuestion, icnExclamation und icnCritical. Das sind die vier, die es sowieso schon gibt. Und was ich auch weiß, wenn ich gar kein Icon haben möchte, dann gebe ich die Null vor. Das ist auch das Normale bei der Message Box. Da steht der Wert 0, wenn kein Icon angezeigt werden soll. Die folgenden Icons einer Enumeration sind immer durchnummeriert. Also, wenn hier der den Wert 0 kriegt, hat der den 1, 2, 3, 4. Oder Sie geben einen vor. Jetzt steht da 0, 1, 2, 99, 100. Das ist natürlich völlig willkürlich, deswegen nehme ich das wieder raus. Jetzt kommen meine beiden Testbeispiele wieder im Vergleich. Ich schiebe die mal davor. Und zwar, mit der Nummer 2. Das Icon (vielleicht nennen wir es dann einfach "Bild") kriegt jetzt den Datentyp von da oben As enmIcons. Deswegen steht hier unten auch nur noch icnBild. Das heißt, es sind nicht mehr alle aus VbMsgBoxStyle, sondern nur noch meine da oben. Und damit es auch hier funktioniert, müssen wir die entsprechend umbenennen. Das ist jetzt nur reiner Text. Aber zum Testen, jetzt kann ich nach dem Komma exakt meine sehen. Das ist schon mal ein Supererfolg, denn auch das None ist drin, es ist nur verdeckt hier, wenn man mit den Cursor-Tasten runtergeht. Nehmen wir mal einfach icnExclamation. Das ist dieses Ausrufezeichen, funktioniert wunderbar, wie eingebaut. Aber noch nicht ganz. Technisch aller super. Wenn ich den jetzt starte, F5, dann werden Sie sehen - Exclamation weit und breit nicht. Da müsste hier jetzt ein Bild, dreieckig mit einem Ausrufezeichen sein. Stattdessen sind dort drei Schaltflächen erschienen. So wie es egal ist, welche Sie anklicken, die sind nicht aktiv, sozusagen, die werden nicht ausgewertet. Also, einfach wegklicken. Das Problem ist: icnExclamation (wir können ja mal nachfragen) hat den Wert "3". Hingegen, vbExclamation, das Original, hätte den Wert "48". Und den muss ich natürlich übergeben. Auch wenn ich die selber neu benenne, neu durchnummeriere, die müssen schon die richtigen Werte haben. Ja, dann erklären wir das dem doch einfach, dass nämlich icnInformation einfach vbInformation entspricht. Und icnQuestion entspricht vbQuestion usw. vbExclamation und vbCritical. Und wenn ich das jetzt prüfe icnExclamation, dann steht da tatsächlich "48". Und jetzt funktioniert auch mein Beispiel. Die Programmieroptik, sozusagen, war ja schon in Ordnung. Aber wenn ich es jetzt starte, erscheint da auch tatsächlich das Ausrufezeichen. Also, Enumerations sind erstmal nur eine Liste von frei benannten Wörtern, Konstanten im Grunde, die alle Integer-Werte haben und wenn Sie nichts dagegen tun, durchnummeriert werden. Und wenn Sie die irgendwo aufrufen als Datentyp, heißt das, dass wenn die Prozedur im Code benutzt wird, dann wird bei dem entsprechenden Argument diese Liste angeboten, die Enumeration nämlich. Und was hier noch dazukommt, weil die Liste nicht völlig beliebig ist, sondern an Originaldaten, nämlich an die Message Box, weitergereicht wird... ...sorge ich hier dafür, dass auch die Originalinhalte, die Werte weitergereicht werden. Also, sobald Sie mit Alternativen, mit Optionen oder sowas zu tun haben in Prozeduren, irgendeine Auswahl, die nachher von dem If abgearbeitet wird, dann empfehle ich dringend nochmal über Enumerations nachzudenken. Ansonsten, die gehören natürlich grundsätzlich hier rein, weil die für das ganze Projekt gelten und überall eingesetzt werden können, nur hier was leichter zu erläutern.

Excel 2013 VBA Grundkurs

Holen Sie aus Excel 2013 mit der integrierten Programmiersprache VBA auch das letzte Quäntchen an Funktion heraus und lassen Sie sich dazu zeigen, was alles möglich ist.

6 Std. 18 min (63 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!