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

Objektmodell

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Das VBA-Objektmodell von Excel ist hierarchisch aufgebaut. So können Sie sich von der Application auf oberster Ebene bis zu einer Zelle auf niederster Ebene übersichtlich durcharbeiten.

Transkript

Bevor wir uns nun mit den Eigenschaften der speziellen Programmierung mit VBA beschäftigen, möchte ich Ihnen einen kurzen Überblick über das Excel-Objektmodell geben. Nicht das komplette, aber so die wesentlichsten Elemente und wenn Sie die verstanden haben, dann kommen Sie mit allen andern auch klar. Und die wesentlichen Elemente sind Dateien und Tabellen. Ich beginne aber trotzdem eins da drüber, sozusagen ganz oben, nämlich mit dem "Application"-Objekt. Die Application, die Anwendung, ist Excel selber. Deswegen werden Sie das praktisch nie erwähnen, wenn Sie alleine mit Excel arbeiten. Spannend wird es erst dann, wenn Sie von Excel aus zum Beispiel Access-Tabellen lesen oder Word-Dokumente. Dann müssen Sie als oberste Instanz, nämlich nicht Excel oder Application angeben, sondern Word oder DAO, DAO ist die oberste Instanz von Access. Aber solange Sie innerhalb von Excel bleiben, ist Application selber ein eher theoretisches Objekt. Da drunter befindet sich eine Auflistung, das sehen Sie immer hier an dem Plural: "Workbooks". Das ist die Liste aller geöffneten Dateien. Workbooks sind die Arbeitsmappen, die Dateien. In dieser Auflistung befindet sich wieder ein Einzelobjekt, nämlich dasjenige von den Workbooks mit der Nummer 1. Normalerweise sind Auflistungen in VBA, 0-basiert, das heißt, das erste Element hat wie in Arrays, die Nummer 0. In Excel sind allerdings sehr, sehr viel Auflistungen 1-basiert, das heißt, das Workbooks(1)-Objekt ist auch wirklich die erste Datei. Also Workbooks ist die Auflistung und Workbooks(1) ist das, in diesem Fall, erste Element. Sie können das in solchen Auflistungen nicht nur über die Nummer, sondern auch über den Namen in Gänsefüßchen aufrufen, und in diesem Fall, zusätzlich auch über zwei weitere, automatisch gefüllte Objekte, nämlich "ActiveWorkbook", beziehungsweise "ThisWorkbook". ActiveWorkbook ist dasjenige, welches der Benutzer gerade vor Augen hat, mit dem er typischerweise arbeitet. Das kann Workbooks(1) sein, aber es ist im Grunde egal. Sie wissen das ist dasjenige was der Benutzer sieht. ThisWorkbook hingegen, ist dasjenige wo Ihr Code drinsteht. Das kann das gleiche sein, muss es aber nicht. Bei Add-Ins, zum Beispiel, oder wenn Sie zwischendurch andere Dateien öffnen, von Ihrem Code aus. ActiveWorkbook ist was der Benutzer sieht, ThisWorkbook ist was Ihren Code enthält. Innerhalb von Workbooks(1), einem konkreten Workbook, einer Arbeitsmappe, gibt es Tabellen, oder im englischen Objektmodell: "Worksheets". Worksheets ist die Auflistung aller Tabellen. Und darin gibt es eine einzige, die Sie entweder über Ihren Namen ansprechen können, das ist die Variante hier mit Text, der Name der Tabelle, oder, so wie hier auch schon gezeigt, über Ihre Nummer. Auch Worksheets sind eine 1-basierte Auflistung. Das hießt, ich habe mich jetzt von oben nach unten gehangelt. In Excel gibt´s ganz viele geöffnete Arbeitsmappen, davon habe ich eine, da drin sind ganz viele Tabellenblätter und davon habe ich jetzt 1. Da ist immer so dieser Wechsel: Auflistung darin Einzelobjekt, Auflistung darin Einzelobjekt. Und auch zu diesem Einzelobjekt Worksheets gibt es eine Alternative sozusagen, dasjenige Worksheet das der Benutzer gerade offen hat, dass da aktiv ist, ist ActiveWorksheet. Jetzt geht´s tiefer innerhalb von Worksheets sozusagen, nämlich die Zellen, die Zellbereiche. Ich fange wieder mit ActiveWorksheet an. Das schließt sozusagen, an der vorherigen Folie ganz unten an. ActiveWorksheet ist als Beispiel für ein Worksheet-Objekt. Da drin befindet sich eine Auflistung, ist wieder am Plural zu erkennen: "Cells". Allerdings anders als die übrigen Auflistungen, ist sie nicht eindimensional, nämlich nur die Liste aller aufgereihten Worksheets beispielsweise, sondern zweidimensional. Es ist ja die Zellenauflistung, in Zeilen und Spalten. Und genau so wie die anderen Auflistungen auch, ist sie 1-basiert, das heißt, dieses Objekt hier "Cells(1,1)" ist die linke obere Ecke, die üblicherweise als "A1" bezeichnet wird. Es könnte auch ActiveCell sein. ActiveCell ist die eine Zelle, die der Benutzer markiert hat. Es könnte auch Selection" sein. "Selection" allerdings, sind mehrere Zellen, von denen eine besonders aktiv ist. AvtiveCell ist die eine innerhalb der Selection und wenn Selection auch nur eine Zelle markiert hat, dann ist das identisch und das kann zufällig auch der hier sein. Das sind also, sozusagen wieder Synonyme. Cells ist die eine Möglichkeit, von ActiveWorksheet auf eine Zelle zu kommen. Die zweite Möglichkeit ist "Range". Es beginnt wieder bei ActiveWorksheet und anstatt jetzt die Cells-Auflistung zu nehmen, habe ich hier eine einzige, die einzige die ich kenne, eine Auflistung die nicht im Plural steht. Es sind trotzdem eigentlich alle Bereiche, von denen ich hier einen konkreten angebe. Das hat den Vorteil, dass es die übliche Schreibweise ist, dass Sie also an dieser Stelle die A1-Schreibweise benutzen können, was übrigens in Makros gar nicht so vorteilhaft ist, aber sich erst mal gut anfühlt. Und auch hier könnte der Bereich A1 mit ActiveCell oder Selection identisch sein, auf jeden Fall haben Sie dort eine oder mehrere Zellen, in der Hand oder im Zugriff. Dieses Range können Sie sich als Datentyp schon mal merken, denn alle Zellen, einzeln oder mehrere, sind immer Range-Objekte, Bereichsobjekte. Und es gibt eine dritte Variante um auf Zellen zuzugreifen, nämlich über diejenigen die ich Bereichsnamen nenne, die offiziell nur Namen heißen. Also Bereichsnamen sind diejenigen die Sie für Zellbereiche vergeben können und da gehört zu ActiveWorkbook eine "Names"-Auflistung. Die Auflistung aller Bereichsnamen, wenn Sie denn welche vergeben haben, beispielsweise für den Bereichsnamen "Gesamt". Und dann haben Sie an dieser Stelle allerdings noch einen zu wenig. Sie haben nur das Namensobjekt in der Hand, und das führt immer wieder zu sehr unbeliebten Fehlermeldungen. Tatsächlich müssen Sie nämlich einen Schritt weitergehen. Sie müssen da drunter dann "RefersToRange" aufrufen. Also von allen Namensobjekten, dasjenige und dessen Bereich, hätten Sie gerne. Erst dann haben Sie wieder eine oder mehrere Zellen in der Hand. Deswegen mache ich da mal so ein Ausrufezeichen dahinter, das wird gerne vergessen. Dieses Objekt ist zu wenig, es muss in seinen Bereich umgewandelt werden. Und auch dann könnte es ActiveCell oder Selection entsprechen. Und jetzt können wir uns dieses Range-Objekt mal konkret angucken, wie sich das im Code anfühlt oder wie es da aussieht. Hier zum Beispiel, habe ich erstmal die Deklaration. Wann immer Sie mit Excel-Zellen zu tun haben, deklarieren Sie "As Range" als Datentyp. Es gibt keinen Zellen-, Spalten- oder Zeilen-Datentyp, der heißt immer allgemein Range. Und da es ein Objektdatentyp ist, muss hier vor auch ein "Set" stehen, bei der Zuweisung. Also "Set", ich habe das ganz lieblos "rngX" (Range X) genannt, können Sie deklarieren, als "ActiveSheets.Cells(1,1)". Das ist die linke, obere Zelle über die Cells-Auflistung. Sie können es alternativ, das überschreibt nämlich jetzt die erste Definition hier, Sie können es alternativ über die Range-Methode beschreiben, dann haben Sie diese A1-Schreibweise. Wenn der Bereich mal größer sein sollte, das ist technisch eigentlich kein großer Unterschied ob Sie eine oder mehrere Zellen haben, dann steht innerhalb der Gänsefüßchen hier, "A1:B2" zum Beispiel, so wie Sie das in der normalen A1-Schreibweise auch kennen. Dann können Sie es schließlich über die Names-Auflistung erreichen, wo Sie dann mit dem Bereichsnamen arbeiten und zwar im Code nicht wissen wo sich dieser Bereich eigentlich befindet, aber das ist genau der Vorteil, das ist nämlich viel zu konkret hier mit A1. Sie wollen in VBA gar nicht wissen wo sich der Bereich befindet, sondern Sie wollen sozusagen einen Übersetzer. Sie wollen in der Tabelle sagen, dieser Bereich hier heißt "Beispiel" und in VBA wollen Sie dann blind auf Beispiel zugreifen, ohne wissen zu müssen, wo´s sich befindet. Dann können Sie nämlich verschiedene Tabellen mit den gleichen Bereichen benutzen, oder in dieser Tabelle den Bereich einfach woanders definieren und trotzdem funktioniert Ihr VBA Code. Und auch hier dran denken, ".Names ("Beispiel")" ist zu wenig, es muss ein ".RefersToRange" dran. Und natürlich können Sie ganz banal auch sagen, das Range-Objekt mit dem Sie arbeiten wollen, ist ActiveCell. Dann hat der Benutzer was für Sie markiert und Sie wollen damit weiterarbeiten. Sie könnten auch mit ActiveCell weiterarbeiten, aber manchmal ist es praktischer, hier so etwas kurzes zu haben. Jetzt haben wir in "rngX" sozusagen eine Zelle im Zugriff und die ist ja kein Selbstzweck, mit der möchte ich irgendwas machen. Ich muss mich jetzt also mit deren Details beschäftigen. Das Objekt ist ActiveCell, kommt von ganz oben, Application, Workbooks, Worksheets herab, wie auch immer. Sie haben jetzt ein Range-Objekt in der Hand, und das könnte beispielsweise auch Selection oder so was heißen. Und dieses hat eine Eigenschaft "Value". Value ist der Wert, das ist also das, was Sie als Zahl oder Text reinschreiben. Das ist eine Eigenschaft von ActiveCell und es gibt eine andere Eigenschaft, die hat ganz viele Eigenschaften, beispielsweise "Interior", auch eine Eigenschaft, die als Eigenschaft nur ein Objekt zurückgibt und erst die "Color", die wirklich brauchbare Eigenschaft ist. Das ist sozusagen ein Zwischenschritt von ActiveCell über Interior zu Color. Sie können mit dem Interior-Objekt was machen, ich sage mal theoretisch, praktisch werden Sie immer von Interior, zum Beispiel, auf deren Color-Eigenschaft zurückgreifen. Die hat auch noch andere Eigenschaften, Pattern zum Beispiel, das Muster, deswegen ist hier so eine Zwischenschicht, Interior ist dieser Füllbereich. Und das sieht dann konkret so aus für die Eigenschaften der Zelle. Hier ist das Range-Objekt, hier weise ich diese Zelle zu und dann kann ich sagen, "rngX.Value" ist gleich der Wert, kann auch, in Gänsefüßchen, ein String sein, oder "rngX.Interior" der Füllbereich und dann nochmal Punkt, hier ist die eigentliche Eigenschaft, der ich dann was zuweisen kann. Und wenn Sie diese Beispiele einigermaßen im Griff haben, das ist sozusagen die Brot und Butter Programmierung in Excel, das ist das was Sie dauernd brauchen, wie kann ich auf eine Zelle zugreifen, wie greife ich auf eine Arbeitsmappe zu und wie kann ich auf Eigenschaften von Zellen zugreifen, genauso nämlich mit diesem minimal Objekt-Modell.

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
Erscheinungsdatum:30.08.2016

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!