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

Auflistungen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Obwohl in Auflistungen völlig unterschiedliche Objekte enthalten sein können, ist der Umgang mit ihnen sehr einfach und vor allem einheitlich. Am bequemsten werden sie mit For-Each/Next-Schleifen bearbeitet.

Transkript

Ich möchte Ihnen den Umgang mit Auflistungen an einem sehr einfachen Beispiel zeigen. Fangen wir vielleicht mal an, die Tabellen zu zählen. Das ist eine ganz typische Auflistung. Also "sub WieVieleTabellen ()" sei die Prozedur und dann kann ich das in einer einzigen Zeile erledigen, indem ich mit "debug.Print" die entsprechenden Objekte befrage. Im einfachsten Fall, wenn ich nicht genau weiß, welche möglichen Objekte es gibt, fange ich ganz oben an. "Application." da stehen jetzt die möglichen Objekte, z.B. könnte ich jetzt unterhalb von "Applications" alle Workbooks nehmen und müsste jetzt eigentlich wissen, wie das Workbook heißt. Das ist nicht wirklich schwierig, es steht hier nämlich da oben, aber es ist mir zu kompliziert. Viel einfacher ist, dass ich auf diese automatischen Objekte zurückgreife, die praktisch alle mit "Active" anfangen und da gibt es ein "ActiveWorkbook" und auf das kann ich zugreifen, egal wie es gerade heißt. Und innerhalb dieses "ActiveWorkbook" der Datei, gibt es eine "Worksheets"-Auflistung und das ist die, deren Anzahl ich ja wissen will. Und die hat erwartungsgemäß dann diese "Count"-Eigenschaft. Und das war´s schon! "Count" ist die Anzahl der Tabellen. Hier sind 2, 4, 6, 7 zu sehen. Wenn ich jetzt mit F5 - nach dem Speichern natürlich - das auslöse, dann wird hier die 7 angezeigt. Also die typische Frage an eine Auflistung ist: Wie viele sind denn drin? Mindestens so typisch ist die Frage: Wie heißt denn ein spezielles Objekt? - eines von dieser Auflistung - Z.B. wie heißt denn die erste Tabelle? Also "sub NameDerErstenTabelle ()" und das geht auch wieder in einer einzigen Zeile. Ich kann also direkt mit "debug.Print" beginnen. Ich frage jetzt wiederum das "ActiveWorkbook". Darin gibt es die "Worksheets"-Auflistung und jetzt will ich ein Einzelobjekt davon haben, und zwar das Erste. Die Hauptfrage ist jetzt eigentlich nur: Hat das Erste die Nummer 0 oder die Nummer 1? "Worksheets" gehören zu den 1 basierten, also das Erste hat die Nummer 1, Klammer zu und das hat dann eine "Name"-Eigenschaft. Allerdings wird der "Name" hier nicht angeboten mit Intillisense, das können wir gleich lösen. Wenn Sie die Zeile verlassen und "Name" groß wird, sind die Chancen schon mal gut, dass es klappt. Und Sie sehen nach dem Speichern mit F5, da steht der Name von Tabelle1. Damit es nicht ganz zu einfach wird, gehe ich mit Alt+F11 mal rüber und ändere hier den Namen. Das nennen wir mal einfach "Daten" oder so was, auch wenn´s mehr bunt als inhaltsgefüllt ist. Mit Alt+F11 kann ich wieder zurück. Und wenn ich´s jetzt nochmal ausführe, dann sehen Sie mit F5, dass er also wirklich den Namen der ersten Tabelle ermittelt hat. Und wenn Sie prüfen wollen, ob es vielleicht eine 0-basierte Liste ist, probieren Sie es einfach aus und wenn Sie mit F5 hier so einen Laufzeitfehler kriegen, außerhalb des gültigen Bereichs für den Index, dann wissen Sie: Oh, es gibt gar keinen 0er Index, also kann ich beenden und wieder die 1 reinschreiben. Das ist der einfachste Test, schneller als in der Hilfe zu suchen. Einfach kurz ausprobieren! Aber Sie haben schon gemerkt, die "Name"-Eigenschaft kam nicht mit Intellisense. Das geht nämlich noch ein bisschen eleganter. Dann wird es erscheinen. Ich kopiere das schon mal. Allerdings braucht es ein paar mehr Zeilen. Also schreibe ich mal ein "Besser" dahinter. Ob es Ihnen besser gefällt, lasse ich mal offen. Es ist zumindest die Version, die Ihnen die List liefert. Dazu muss ich erst mal eine passende Variable deklarieren. Die wird vom Datentyp "Worksheet" sein, deswegen werde ich die als "wks" beginnen, und dann heißt sie ganz lieblos "Diese As Worksheet". Und dann muss ich die zuweisen. Das ist eine Objektvariable, also mit "set", "wksDiese=" und das kann ich da unten ausschneiden. Das brauchen wir, das fliegt raus. Damit habe ich diese Formulierung hier, welches "Worksheet"-Objekt ich haben möchte, einer Variablen zugewiesen, die auch den passenden Datentyp haben muss und nicht etwa "Object". Und jetzt kann ich nämlich hier einfach schreiben, wenn ich mich auf dieses Objekt beziehe und den Punkt mache, wegen des konkreten Datentyps, weiß diese Variable jetzt, was zu tun ist, oder was sie an Fähigkeiten hat, z.B. eine "Name"-Eigenschaft. Gerade wenn man anfängt zu programmieren und die typischen Eigenschaften noch nicht so im Handgelenk im Griff hat, dann ist es sehr hilfreich, mit anständigen Datentypen zu arbeiten und lieber einer Variablen zuzuweisen, die das dann liefert. Die andere Version funktioniert genau so gut, wenn man weiß was man macht, nur häufig klappt dann hier nicht diese Intellisense-Liste aus, weil manche von diesen Definitionen - sage ich mal - ein bisschen schwammig sind und hier ist es konkret. Das ist der Name der ersten Tabelle. Ich möchte natürlich auch den Namen der letzten Tabelle herausbekommen können. Ich kopiere das hier schon mal. Muss es also gleich umbenennen. Also die letzte Tabelle will ich rauskriegen. Das trifft vor allem hier diese Nummer. Und die 1 basierten Auflistungen haben den Vorteil, dass die Anzahl der Elemente auch die Nummer des letzten Elements darstellt. Sonst müssten Sie einfach eins abziehen. Also kann ich hier wiederum schreiben: Ich hätte gerne das Objekt, was die letzte Nummer trägt. Also "ActiveWorkbook.WorkSheets.Count" - aber nicht Copy sondern Count - Das heißt, hier steht gleich eine 7 drin und ich kriege dann deswegen das siebte Objekt zurück. Und wenn ich das ausführe mit F5: Die letzte Tabelle heißt "Beispiel". Und das lässt sich ein bisschen kürzer schreiben, sagen wir genauer, nicht so breit, dafür höher, wenn ich das so formulieren darf. Hier steht zweimal "ActiveWorkbook.Worksheets" drin. Einmal hier, einmal hier. Und das werde ich jetzt sozusagen ausklammern. Also hier schon mal ausschneiden. Dann gibt es eine Konstruktion die heißt "with", einem Objekt, das wird hier eingerückt, und endet mit "end With", und überall dort wo ein führender Punkt ist, kann auch mitten in der Konstruktion sein, wird dieses Objekt eingefügt. Wenn ich das jetzt aber wegnehme, dann fehlt da der führende Punkt. Wenn ich das also nochmal einfüge, dann muss ich erstmal dafür sorgen, dass hier dieses seltenst, bis praktisch nie benutzte "Item"-Objekt erscheint und dann kann ich hier den führenden Punkt wieder anzeigen. Wenn Sie also eine sehr lange Zeile kürzer machen wollen, dann ist es häufig so, dass darin ein Objekt mehrfach vorkommt und das können Sie verkürzen. Normalerweise steht da eine Eigenschaft, die Sie dann mit dem führenden Punkt beginnen lassen können. Wenn nicht, dann trifft das vor allem dieses "Item"-Objekt, was Sie hier entsprechend nutzen können. Also wenn Sie von der ganzen Auflistung was wollen, dann ist es typischerweise die "Count"-Eigenschaft, hier oder hier, wenn Sie von einem Einzelobjekt etwas wollen, dann ist es typischerweise die "Name"-Eigenschaft und es ist ein bisschen eleganter, wenn Sie das einer Variablen mit einem vernünftigen, nämlich passenden Datentyp vorher zuweisen.

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!