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 für Profis

Kombinationsfeld ergänzen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Die ComboBox stellt eine Mischung aus Eingabefeld und Listenauswahl dar. In diesem Beispiel werden – abhängig vom Wert in der neuen ComboBox – unterschiedliche Listen für das Listenfeld erzeugt.

Transkript

Im Moment kann dieser Dialog die Liste der Tabellen-Blätter anzeigen. Hier einfach hart verdrahtet sozusagen, die Liste der Tabellen. Das ist nett, das macht er wunderbar, aber ich hätte das gern flexibler. Zum Beispiel könnte ich wechseln zwischen der Liste der Tabellen und der Liste der Dateien, wo ich jetzt aber erst einige anlegen müsste, deswegen werde ich alternativ die Liste von Zellen nehmen, davon habe ich schon genug. Und die möchte ich umschalten können, das heißt zuerst einmal, dass ich ein bisschen Platz brauche, am besten oberhalb, und jetzt mit Shift-Klick können Sie so ein zweites zur Auswahl dazunehmen, deswegen schiebe ich beide zusammen ein bisschen nach unten, aber so viel Platz braucht's gar nicht, und werde dazwischen eine Auswahl erlauben, wo ich sage, ich hätte gerne entweder die Tabellen-Blätter oder die Zell-Adressen in dem Fall. Sie können natürlich einfach eine Checkbox nehmen, die kann aber nur "Ja" oder "Nein", das ist hier schonmal unpraktisch. Sie könnten auch Option Buttons nehmen, die könnten mehrere, brauchen aber sehr viel Platz. Ich gehe mal sehr schnell auf Comboboxen. Comboboxen brauchen immer den gleichen wenigen Platz, egal, wie viele Elemente da drin sind, Sie können dort mit der Tastatur anfangen zu tippen und kriegen den passenden Eintrag. Also eine Combobox, und die ziehe ich direkt hier auf, ungefähr so, wenn ich das einigermaßen gut treffe, und die muss natürlich einen vernünftigen Namen kriegen, für Combobox ist mein ungarisches Präfix "cmb", und die nenne ich mal einfach "Varianten". Und deswegen erfinde ich auch direkt hier vorne, das können wir sogar skrupellos kopieren, Steuerung+C, Steuerung+V, nicht immer hier in der Mitte, wenn man nicht aufpasst, es liegt nämlich auch noch dahinter, mit Steuerung+V wieder reinkopiert, dann wird das Label entsprechend auch "lblVarianten" heißen. Ich muss mal eben gucken, dass ich da auch den Plural benutzt habe. Und der Text dazu heißt einfach "Varianten", was da steht, ist jetzt relativ Wurst. Und inhaltlich möchte ich dort auswählen können zwischen der Liste der Tabellen-Blätter, wie es das schon gibt, und der Liste von Zell-Adressen, einfach nur als Beispiel. Ich muss diese vier -- ich werde jetzt hier gedrückt ein Viereck aufziehen, nochmal markieren, und einen Rasterpunkt tiefer ziehen, dann ist es harmonischer. Hier können wir auch Accelerator vergeben, da wäre also hier, weil das V darin vorkommt -- das muss gar nicht der erste Buchstabe sein -- ein "V" sinnvoll, und für die Auswahl nehmen wir als Accelerator das "A", dann ist es auch perfekt. Und ich möchte hier drin jetzt auswählen können zwischen verschiedenen Varianten. Wie eine Listbox lässt sich auch eine Combobox nur im Initialize füllen, oder sagen wir besser nur zur Laufzeit, es muss nicht im Initialize sein, das werden Sie gleich sehen. Also Doppelklick hier, im UserForm_Initialize werde ich jetzt dafür sorgen, dass deren Daten gefüllt werden. Das machen wir mal, bevor die andere Box gefüllt wird. Im Moment sind die noch unabhängig, aber auf Dauer muss man da aufpassen, und auch da mit einer With-Struktur, "With Me.cmbVarianten", "End With", und dazwischen passiert jetzt genau das, was ich bei der anderen auch schonmal gemacht hatte, mit ".AddItem" zu Fuß was reinschreiben, also zum Beispiel die Tabellen-Namen, und ein zweites ".AddItem" für die Zellen-Adressen. Und auch dort bin ich jetzt sicher, dass es garantiert ein Element gibt, und kann, wie hier, bei dem ListIndex, aber natürlich innerhalb, ".ListIndex=0", einen auswählen. Das Ganze können wir schonmal speichern, und "Debuggen Kompilieren" und mit F5 testen. Dann steht hier sehr schön "Tabellen-Name" und was Sie hier unten sehen, sind die Tabellen-Namen. Kann ich noch den Plural wählen, und bei der Gelegenheit hier aufräumen. Auch hier gibt's so einen Selection Margin, den ich eigentlich nicht brauche, den es leider bei Listboxen nicht gibt, deswegen haben die jetzt unterschiedliche Abstände, damit kann ich aber leben, ich werde also hierfür den Selection Margin auch entfernen, und dann können wir nochmal gucken mit F5. Hier ist die Auswahl, es passiert noch nichts, aber technisch ist soweit schonmal alles in Ordnung, und wenn ich hier wechsle, soll auf Dauer dann der Inhalt hier unten wechseln. Das braucht noch ein bisschen Vorbereitung, vor allem möchte ich bei der Gelegenheit ein bisschen aufräumen, wo welche Aktionen stehen. Ich werde nämlich jetzt hier die Anzeige der eigentlichen Daten auslagern. Also diesen kompletten Block mit Steuerung+X ausschneiden, eine neue Prozedur erfinden, die darf auch gerne "private sub" sein, das ist nicht zwingend mit Private, aber hilfreich, dass sie nicht nach außen sichtbar ist erstmal, nennen wir mal "DatenAnzeigen", und da kommt das wieder rein, und damit das funktionsfähig ist, muss ich natürlich auch die Variable hier ausschneiden, Steuerung+Pfeil runter, springt übrigens in die nächste Prozedur, sehr praktisch, und hier Steuerung+V, wieder einfügen. Erstmal lieber Kompiliercheck, alles in Ordnung, nur dieses wird noch gar nicht aufgerufen. Damit es also wie vorher funktionsfähig ist, muss ich mit "DatenAnzeigen", Steuerung+Leertaste, dann ergänzt er das. Das, was ich hier exportiert habe in diese andere Prozedur, muss ich einfach nur wieder aufrufen. Ich habe also nichts anderes gemacht, als diese Daten auszulagern, und wenn ich das mit F5 jetzt starte, sehen Sie, es funktioniert alles, es passiert hier immer noch nichts, das ist auch noch nicht vorgesehen, aber es ist jetzt soweit vorbereitet, dass ich dort anpassen kann. Jetzt kommt der zweite Teil. In dieser Aktion, wenn ich also hier was auswähle, anklicke, dann sollen sich unten die Daten ändern. Doppelklick hier, dann bin ich fast in der richtigen Prozedur, allerdings ist das Standardereignis "Change", ich hätte gern "Click", da ist draufgeklickt worden, Change ist allzu viel Änderung, auch wenn man da einzelne Buchstaben ändert, und dort möchte ich jetzt mit dem Click rauskriegen, was hat mein Benutzer eigentlich ausgewählt? Da stehen zwei Sachen drin, ich wollte hier noch ein "n" ergänzen, und ich kann jetzt abfragen, welche von den beiden Zeilen, ganz platt über ihren ListIndex, ausgewählt wurde. Auch wenn es nur zwei sind, ich könnte "If Zeile1 or Zeile2", genauer gesagt "If .ListIndex = 0 or .ListIndex = 1" ist, könnte ich abfragen, aber es können ja mal mehr werden, deswegen werde ich direkt eine "Select Case"-Struktur nehmen. Auch wenn da nur zwei drinstehen, und Sie werden sehen, es stehen gleich drei drin, das lohnt sich, wenn Sie es mal erweitern wollen. Also, "me.cmbVarianten.ListIndex", das ist das, was mir sagt, was da ausgewählt wurde, und dann gibt es einen "Case 0", das ist dieses "Tabellen-Namen", es gibt ein "Case 1", das sind die Zellen-Adressen, und da kommt der dritte Eintrag, ich mache bei Select Case immer eine Else-Struktur. Also Select "Case Else", was ist, wenn eine andere Auswahl getroffen wurde? Wenn das vorkommt, haben Sie einen Programmierfehler, erstmal mache ich "End Select", und jetzt kann ich hier schon reinschreiben, wenn was anderes als null und eins ausgewählt wurde, "Das hätte nicht passieren dürfen!", das kann man noch ein bisschen korrekter, inhaltlich sprechender formulieren, aber ich weiß jetzt auf jeden Fall, da ist ein Programmierfehler, also ein "vbCritical". Und weil das relativ viel Platz braucht, hier ein Case und da ein Inhalt, werde ich die in eine Zeile schreiben. Das ist hier sozusagen das Gegenstück zu einem Leerzeichen-Unterstrich- Pseudoumbruch hier. Dieser sorgt dafür, dass optisch mehrere Zeilen für den Compiler eine Zeile bilden. Und das ist das Gegenstück, eine optische Zeile sind für den Compiler zwei Zeilen, die darf ich hier zusammenfassen, das ist bei Select Case sehr praktisch. Ich werde also auch hier im Case 0, wo die Tabellen-Namen erscheinen sollen, werde ich dafür sorgen, dass jetzt "Daten anzeigen", der einzige Befehl, in dieser Zeile mit drinsteht. Aus optischen Gründen nehme ich jetzt hier die Tab-Taste, damit die gleich hintereinander passend stehen. "DatenAnzeigen" ist jetzt nicht optimal, ich sollte das vielleicht besser "TabellenAnzeigen" nennen, und, bevor ich jetzt hingehe und das zu Fuß mache und irgendeinen vergesse, Steuerung+H, und dann "TabellenAnzeigen". Dann sollten Sie sich ungefähr Gedanken machen, wie viele könnte es geben? Zwei bis vier sag ich mal. Und wenn ich "Alle ersetzen" sage, und er sagt mir "drei", dann fühlt sich das gut an. Wenn da jetzt 45 erschienen wäre, hätte ich irgendwas falsch gemacht. Das passiert einem vor allem, wenn man kurze Variablennamen, sowas wie ein I, austauscht, und vergisst, nur das ganze Wort zu suchen. Also, die drei sind ausgetauscht und es muss schonmal prophylaktisch eine andere geben, die heißt "Private Sub ZellAdressenAnzeigen()". Die tut zwar noch nichts, aber es gibt sie schon als Prozedurrumpf, deswegen kann ich sie da oben schonmal reinschreiben. Mit Tab-Taste an die gleiche Stelle springen, "Zell", und dann Steuerung+Leertaste. Technisch ist jetzt alles in Ordnung, ziemlich, aber es funktioniert noch nichts. Jetzt muss ich hier eine entsprechende Schleife machen, das liest sich so ähnlich, dass ich das fast rüberkopieren könnte, aber dabei gibt's immer viele Schreibfehler beim Ändern, also "dim rngDieser As Range", und dann "With Me.ListAuswahl", "End With" nicht vergessen, und "for each", Sie sehen, das wiederholt sich weitestgehend, "for each rngDieser" eine einzelne Zelle "in Selection.cells". "Selection" ist ein bisschen unbestimmt, deswegen kommt nach dem Punkt nichts. Also die Cells-Auflistung will ich benutzen, "next" nicht vergessen, und dann wieder wie oben, ".AddItem", und dieses Mal hätte ich gerne von "rngDieses.AddressLocal", das ist die deutsche Schreibweise, ist bei A1-Anzeige egal, aber wenn Sie Z1S1-Anzeige der Zellen haben, dann unterscheidet sich das, und auch hier will ich die erste auswählen, ".ListIndex=0", mehr passiert ja mit denen nicht, und dann kann ich hier entsprechend schreiben, "Me.lblAuswahl.Caption=.ListCount", verkettet mit Zellen. Sieht soweit gut aus, "Speichern","Debuggen" "Kompiliercheck", und mit F5 einmal laufen lassen. Sie bemerken hier schon das erste, es ist hier erstaunlich voll, 14 Tabellen. Wenn ich von Tabellen-Namen auf Zell-Adressen wechsle, sind's plötzlich 15 Zellen. Markiert -- da ist sie -- ist nur eine einzige, wenn Sie ganz unten gucken, das ist deren Zell-Adresse. Jedes Mal, wenn ich oben was auswähle, wird es mehr. Ich habe also das Löschen vergessen, das findet hier drinnen statt, können wir direkt nachreichen. Bevor ich irgendwas mache, und zwar im Click auf dieses Auswahlfeld, gehe ich jetzt da hin, und sorge dafür, dass diese ListAuswahl mit "Clear"-Methode erstmal leergemacht wird. Das Zweite ist, wenn ich jetzt "cmbVarianten_Click" auslöse, das passiert hier, indem ich den ListIndex setze, dann ruft der schon Tabellenanzeigen auf, und ich rufe es anschließend nochmal auf. Deswegen waren die am Anfang doppelt, also das wird kürzer, weil der ListIndex auch ein Click auslöst, wird dort direkt Tabellenanzeigen aufgerufen. Jetzt ist es besser, mit F5 sehe ich also hier sieben Tabellen, deswegen ist das auch immer so praktisch, an dieser Stelle die Anzahl zu sehen, dann Zellen-Adressen, nur die eine Zelle, und wenn ich wieder wechsle, nur die sieben Tabellen. Ich werde jetzt mal eben viele Zellen markieren, damit Sie auch sehen, wie es dann funktioniert, und hier mit F5 starten. Ich wechsle auf die Zell-Adressen, und da sehen Sie auch, automatischer Rollbalken. Es ist jetzt nicht hübsch, aber es ist wunderbar funktionsfähig. Ich habe offenbar fast 200 Zellen markiert. Also, eine Auswahl würde ich am sinnvollsten mit einer Combobox machen, und der Click in der Combobox löst eine Änderung im Dialog aus, und da muss man gerade bei Listboxen immer, bei Comboboxen übrigens auch, drauf achten, den vorherigen Inhalt zu löschen, das ist nämlich nicht zwangsläufig, sondern das muss man selber auslösen.

Excel 2016 VBA für Profis

Nutzen Sie die Möglichkeiten der Programmiersprache VBA in Excel 2016, um eigene Dialoge zu erstellen, auf andere Arbeitsmappen zuzugreifen und wichtige Funktionen einzusetzen.

5 Std. 52 min (55 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:25.01.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!