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 2013 VBA Grundkurs

Objekt-Modell

LinkedIn Learning kostenlos und unverbindlich testen!

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

Transkript

Damit Sie verstehen, wie man mit VBA auf die Objekte von Excel zugreifen kann, möchte ich Ihnen das Objekt-Modell hier vorstellen. Und zwar natürlich nicht das Ganze, sondern die wesentlichen Teile, die sich mit untereinander Dateien und Tabellen, und später natürlich auch Zellen beschäftigen. Wenn Sie diesen Teil des Objekt-Modells verstanden haben, werden Sie die übrigen Teile auch wieder erkennen. Das ist sehr einfach, sehr übersichtlich und immer wieder das Gleiche. Es beginnt ganz oben und zwar richtig oben, bei Application. Application ist die Anwendung, das Programm selber, Excel. Das können Sie häufig weglassen, denn Sie programmieren in Excel, da ist es selbstverständlich. Aber sobald Sie z.B. ein zweites Objekt-Modell hinzubinden, um etwa auf Access-Tabellen zuzugreifen, ist es wichtig. Bis dahin ist das eigentlich nur der Form halber das oberste Objekt. Da drunter liegt Workbooks. Das ist die Auflistung aller geöffneten Arbeitsmappen, Dateien. Wenn Sie eine davon konkret haben wollen, dann würden Sie deren Nummer in Klammern angeben, oder deren Namen in Klammern und in Gänsefüßchen. Bei frisch geöffneten Arbeitsmappen oder vor allem neu angelegten, wissen Sie den Namen oft gar nicht. Die heißt völlig zufällig "Mappe 17". Da ist die Nummer durchaus praktisch. Oder Sie sagen, es ist ActiveWorkbook. ActiveWorkbook ist diejenige Arbeitsmappe, die der Benutzer gerade sieht. Im Gegensatz zu ThisWorkbook, das ist die Arbeitsmappe, in der sich Ihr Code befindet. Das kann die gleiche sein, muss aber nicht. Innerhalb einer Arbeitsmappe befinden sich Worksheets - Tabellen. Genau genommen, befinden sich darin sogar Sheets. Das ist etwas unschärfer und schließt außer Tabellen, auch noch Diagramme und Macros und ähnliches ein. Aber da ich hier vor allem auf Zellen zugreifen will, geht es hier um das Worksheets-Objekt, sprich: die Worksheets-Auflistung. Und auch hier ist es so, wenn Sie davon eine konkrete Tabelle haben wollen, dann geben Sie die in Klammern an. Hier die Schreibweise, wenn Sie den Namen wissen, auch da dürfen Sie mit einer Zahl arbeiten. Viele dieser Auflistungen in Excel sind Eins-basiert, also Workbooks(1) ist tatsächlich die erste Arbeitsmappe. Worksheets(1) ist tatsächlich auch die erste Tabelle. Normalerweise wären Auflistungen Null-basiert, das erste Objekt hat also die Nummer Null. Es ist bei unserem VBA Objekt-Modell hier tatsächlich, fast ausnahmsweise, der Normalfall. Damit sind wir von ganz oben, der Application, heruntergestiegen in die Niederungen einer Tabelle. Und auch die Tabelle selber hat so ein Gegenstück für die Kurzfassung. ActiveWorksheet ist die Tabelle, die der Benutzer oder die Benutzerin gerade ausgewählt haben. Das sieht konkret dann so aus im Code. Sie würden eine Variable deklarieren mit diesem Datentyp Worksheet. Und dann können Sie zuweisen, entweder den mühsamen Weg von ganz oben: Application Punkt, dann klappt eine Liste aus, Sie finden darin Workbooks, Klammer auf, das zweite Klammer zu, Punkt. Da gibt es eine enthaltene Auflistung von Worksheets, die wiederum hier namentlich angesprochen wird. Das ist also die Tabelle3 von der zweiten Arbeitsmappe. Alternativ, das überschreibt die Erste hier nämlich, alternativ können Sie auch sagen: "Ich nehme einfach ActiveWorkbook". Das, was mein Benutzer oder meine Benutzerin gerade geöffnet haben und davon die zweite Tabelle. Oder ich mache es noch kürzer. Ich sage einfach: "Mein Worksheet". Das Objekt, mit dem ich gerade arbeiten will, ist dasjenige, was ich hier als ActiveSheet zufällig offen habe, was immer mein Benutzer oder meine Benutzerin gewählt hat. Das sind die drei Wege von oben nach unten sozusagen, immer kürzer, immer neutraler. Es gibt sogar einen von unten nach oben. Der ist sehr selten, aber nur, dass Sie sehen, das geht auch. ActiveCell, die Zelle, in der sich der Cursor gerade befindet, hat ein Parent-Objekt, ein Eltern-Objekt. Und das ist die zugehörige Tabelle. Geht auch, aber wie gesagt eher selten. Jetzt gehen wir eine Ebene tiefer, wir haben die Tabelle in der Hand sozusagen. Es geht zu den Zellen, Zugriff auf Zellen. Da gibt es drei alternative Methoden, die je nachdem wie Sie gerade arbeiten, Vor- und Nachteile haben, z.B. die Cells-Auflistung. Es fängt an mit einem Worksheet-Objekt, wie immer Sie das gerade im Zugriff haben. Ich nehme jetzt hier mal beispielhaft ActiveWorksheet. Und dadrin befindet sich eine Cells-Auflistung, die Liste aller Zellen. Die ist übrigens anders, als die meisten übrigen Auflistungen, die sind nämlich eindimensional. Ist sie zweidimensional und deswegen gibt es zwei Parameter: Cells(1, 1) ist die Zelle A1 oben links, auch Cells ist Eins-basiert. Sie können also Zellen über ihre Koordinaten ansprechen. Das ist so wie, wenn Sie in Excel selber umschalten auf die Z1S1 Bezugsart. Das kennen Sie vielleicht noch aus den Optionen. Da wird oben in der Spalten nicht mehr ABC, sondern 123 angezeigt. Diese Zelle kann zufällig auch ActiveCell sein, weil der Benutzer gerade reingeklickt hat, oder es kann auch die Selection sein. Die Selection ist der Bereich, den der Benutzer markiert hat, auch wenn das nur eine Zelle ist, es können aber viele sein. ActiveCell ist, selbst wenn er viele markiert hat, nur die eine Zelle, die so ein bisschen hervorgehoben ist, typischerweise die linke obere von so einem markierten Bereich. Also, ActiveCell ist eine, Selection sind viele, können viele sein. Und wenn das zufällig sich in A1 trifft, dann ist es Cells(1, 1). Also, auch da gibt es verschiedene Arten das anzusprechen. Das war die erste Variante: die Cells-Auflistung. Die zweite Variante ist Range, der Bereich. Es beginnt wieder mit ActiveWorksheet. Von ActiveWorksheet aus gibt es keine Auflistung Range, sondern ein Objekt Range. Und das hat den Vorteil, dass Sie in Gänsefüßchen Ihre gewohnte A1-Schreibweise nehmen können. Ich nehme jedenfalls mal an, dass Sie das so machen und gewohnt sind. A1 ist sehr beliebt und das bedeutet, wenn Sie irgendwie auf rCell gucken, können Sie direkt Koordinaten lesen: Spalte A, Zeile 1, und das hier eintragen. Das kann wiederum ActiveCell und Selection entsprechen, muss aber nicht. Selection, ein größer Bereich, würde übrigens hier entsprechend geschrieben. Also, dann steht da statt A1, A1:B2 z.B, dann sind das links oben die vier Zellen. Das hat den Vorteil, dass es Ihrer Gewohnheit des normalen Arbeitens entspricht, ist aber in der Programmierung tatsächlich gar nicht so praktisch. Da würde man eher ganz anders zugreifen, nämlich mit dem Names-Objekt und auch wieder einer Auflistung. Names sind das, was wir als Bereichsnamen kennen. Sprich: Sie markieren irgendeinen Bereich und oben links neben der Eingabezeile können Sie in einem Bereich Texte angeben, nämlich Bereichsnamen. Und die stehen dann ersatzweise für die Zelladressen. Der bekannteste dieser Bereichsnamen ist Druckbereich. Der entsteht, wenn Sie was markieren und sagen: nur das wollen Sie ausdrucken. Der ist übrigens sogar an die Tabelle gebunden, denn jede Tabelle kann den gleichen Namen für sich benutzen. Typischerweise sind Bereichsnamen an die Arbeitsmappe gebunden, also innerhalb der Arbeitsmappe für alle sichtbar. Umso merkwürdiger ist, dass das Names-Objekt nicht an der Tabelle hängt, sondern an der Application. Das ist eigentlich völlig falsch, denn nicht Excel kennt die Bereichsnamen, sondern nur die Arbeitsmappe, die gehen nicht Arbeitsmappen übergreifend weiter. Hilft aber nichts. Also, von Application aus geht es zum Names-Objekt. Und deswegen oben einmal zum Erinnern: das ist sozusagen das falsche Elternteil. Names ist wiederum eine Auflistung. Das heißt, Sie können wie gewohnt hinter die Auflistung in Klammern und dann in Gänsefüßchen den Bereichsnamen nehmen. Und diese Schreibweise hat den Vorteil, dass es Ihrem Code, Ihrer VBA-Programmierung völlig wurscht ist, wo sich konkret diese Zelle befindet. Wenn Sie da A1 geschrieben haben, darf sich die Tabelle nie wieder gestalterisch ändern. Wenn da steht der Bereichsname Gesamt - es ist Ihrem Macro erstmal relativ egal, wo sich diese Zelle befindet, viel viel neutraler. Allerdings haben Sie mit diesem Objekt nur das Names-Objekt in der Hand. Das heißt, Sie wissen gerade mal, wo sich die Zelladressse befindet. Das wollen Sie gar nicht, Sie wollen auf die Zelle zugreifen. Und deswegen hängt dann immer noch ein RefersToRange dahinter - immer wieder gern vergessen oder man wundert sich, warum da kein Value ausklappt. Hinter Names, selbst in dieser konkreten Version, dass Sie sagen: "Diesen Namen meine ich", gibt es noch keine Zelle oder Selection. Sondern sie müssen immer erst RefersToRange dahinter hängen und dann haben Sie die Zelle. Also, "bezieht sich auf Bereich" müsste man das übersetzen. Dann erst haben Sie die Zelle oder Zellen in der Hand. Und auch die könnten wieder zufällig zu ActiveCell und Selection passen. Das sieht konkret für so ein Zellbereich so aus, wenn Sie das programmieren. Also, Dim rngX As Range, das ist dieser Datentyp Range - einer der wichtigsten in Excel. Und dann können Sie das beschreiben, als in dem aktuellen Blatt von der Cells-Auflistung, die Zelle (1, 1), das wäre A1. Oder alternativ der Range, der sich in Gänsefüßchen B2 nennt, das ist die Zelle B2. Oder schließlich von allen Names der Bereichsname Beispiel und dessen Bereich, wo immer das liegen mag, das kann man hier sogar nicht sehen. Damit haben Sie jetzt eine konkrete Zelle in der Hand, möglicherweise auch mehrere. Aber tun wir so, als sei das eine. Und wir können uns um die Zelle selber kümmern. Ich verkürze das jetzt mal auf ActiveCell. ActiveCell ist eine einzelne Zelle, sicher. Und die kann z.B. eine Value-Eigenschaft haben, deswegen habe ich das jetzt kursiv gesetzt. Value ist eine Eigenschaft, die kann direkt was zugewiesen bekommen oder auslesen. Alternativ könnte sie eine Eigenschaft Interior im Bereich haben. Nämlich ActiveCell, von hier aus geht es nach da weiter. Und diese Eigenschaft ist eigentlich wieder ein Unter-Objekt. Interior selber hat dann die wirkliche Eigenschaft Color. Also, hier wird mal mit einem Pfeil übersprungen. Die beiden Unter-Eigenschaften Value und die Interior hängen an ActiveCell. Aber Interior ist nicht nur eine Eigenschaft, sondern gibt auch wieder ein neues Objekt zurück, welches dann tatsächlich die endgültige Eigenschaft hat Color. Das sieht konkret in den Zellen-Eigenschaften so aus. Auch eine einzelne Zelle ist ein Range-Bereich. Also, Dim rngX As Range. Den muss ich mal zuweisen, in verschiedenen Varianten, wie auch immer. Und dann kann ich entweder seiner Value-Eigenschaft direkt was zuweisen. Oder sein Unter-Objekt Interior nehmen und dann mit dem Color z.B. die Zelle blau färben. Damit sind wir jetzt sozusagen beim direkten Zugriff auf eine Zelle. Wir haben uns von ganz oben herabgehangelt: von Application, über Workbooks zu Worksheets, zu einer Zelle und deren Eigenschaften. Und das ist das Objekt-Modell, der Kern davon, den man im Griff haben sollte.

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!