| Anwendbar unter |
Microsoft Office Excel 2003 Microsoft Excel 2002 |

|
Dieser Artikel wurde von Curtis Frye verfasst, dem Autor von Microsoft Office Excel 2003 Programming Inside Out.
|
Viele Aufgaben in Excel, z. B. das Eingeben von Umsatzdaten für einen bestimmten Tag oder das Hinzufügen einer Formel in einem Arbeitsblatt (Tabellenblatt: Das primäre Dokument zum Speichern und Bearbeiten von Daten in Excel. Wird auch Tabelle genannt. Ein Tabellenblatt besteht aus Zellen, die in Spalten und Zeilen angeordnet sind, und wird immer als Teil einer Arbeitsmappe gespeichert.), werden nur einmal ausgeführt. Andere Aufgaben hingegen, z. B. das Ändern des Formats für einen Zellbereich, werden häufig wiederholt, können mithilfe von Excel-Tools jedoch schnell durchgeführt werden. Oft gibt es jedoch auch eine oder zwei Aufgaben, die Sie häufig ausführen und für die eine Vielzahl von Schritten erforderlich ist.
Sie könnten z. B. jedes Mal, wenn Sie Ihren Kollegen einen Bericht vorstellen, wichtige Zellen hervorheben. Anstatt hierzu eine Vielzahl von Schritten manuell durchzugehen, können Sie ein Makro – d. h. eine aufgezeichnete Abfolge von Aktionen – erstellen, das diese Schritte für Sie ausführt. Wenn Sie mit der Programmiersprache Microsoft Visual Basic® für Applikationen (VBA) vertraut sind, können Sie auch benutzerdefinierte Makros neu schreiben. In beiden Fällen können Sie Makros nach dem Erstellen je nach Bedarf ausführen, bearbeiten oder löschen.
Dieser Artikel gibt Ihnen eine Einführung in das objektorientierte Programmieren und den Visual Basic-Editor. Hierbei handelt es sich um die Umgebung, in der Sie eigene Excel-Makros schreiben können. Wenn Sie selbst einmal ein benutzerdefiniertes Makro schreiben möchten, sollten Sie Super-Easy Guide to the Microsoft Office Excel 2003 Object Model von Frank Rice lesen (nur auf Englisch verfügbar). Dort wird das Verfahren ausführlich beschrieben.
Verwenden des Visual Basic-Editors
Der Visual Basic-Editor ist ein leistungsstarkes Tool, mit dem Sie Funktionsumfang und Flexibilität von Makros über das beim Aufzeichnen mögliche Maß hinaus steigern können. Zeigen Sie zum Öffnen des Editors im Menü Extras auf Makro, und klicken Sie dann auf Visual Basic-Editor. (Sie können auch ALT+F11 drücken.)
Zeigen Sie zum Öffnen eines bestimmten Makros im Menü Extras auf Makro, und klicken Sie dann auf Makros. (Sie können auch ALT+F8 drücken.) Wählen Sie im Dialogfeld Makro das Makro aus, das Sie bearbeiten oder anzeigen möchten. Klicken Sie anschließend auf Bearbeiten, um den Visual Basic-Editor zu öffnen.
Objektorientierte Programmierung im Visual Basic-Editor
Im Visual Basic-Editor erstellen Sie mithilfe der objektorientierten Programmierung eigene Programme. Bei einem Programm handelt es sich, einfach ausgedrückt, um eine Reihe von Anweisungen, die vom Computer in einer bestimmten Reihenfolge ausgeführt werden.
In objektorientierten Programmiersprachen basieren alle Elemente des Computercodes auf den Dingen in Ihrer Umgebung. Diese „Dinge“ werden (Sie werden es geahnt haben) als Objekte dargestellt, und alle Aktionen und Daten werden in diesen Objekten eingeschlossen. In Excel kann es sich bei Objekten um Arbeitsmappen, Arbeitsblätter, Zellbereiche und externe Dateien handeln.
Im Allgemeinen gibt es vier Merkmale von Objekten, mit denen Sie ein Programm entwickeln: Eigenschaften, Methoden, Ereignisse und Auflistungen.
Eigenschaften
Einfach ausgedrückt handelt es sich bei Eigenschaften um Variablen, die einen Aspekt des Objekts beschreiben, in dem sie enthalten sind. Eine häufig verwendete Objekteigenschaft in Excel ist Name. Diese Eigenschaft enthält den kennzeichnenden Wert, den Sie oder Excel einer Arbeitsmappe, einem Arbeitsblatt, einem Zellbereich oder einem anderen Objekt zuweisen. Wenn Sie z. B. den Namen eines Arbeitsblatts (mithilfe von VBA-Code oder durch Klicken mit der rechten Maustaste auf die Arbeitsblattregisterkarte) ändern, ändern Sie den in der Name-Eigenschaft gespeicherten Namen.
Sie können für einige Arbeitsblatteigenschaften (z. B. Name) direkt in VBA neue Werte festlegen. Zum Ändern anderer Arbeitsblatteigenschaften müssen Sie möglicherweise eine Aktion in Excel aufzeichnen (z. B. die Schritte zum Schützen eines Zellbereichs) oder eine Methode verwenden (wie im nächsten Abschnitt beschrieben).
In VBA wird auf Eigenschaften in einem Programm mithilfe der Punktnotation verwiesen. Dabei wird zuerst der Name des Objekts angegeben, dann der Name der Eigenschaft, und die beiden Elemente werden durch einen Punkt getrennt. Wenn Sie z. B. den Namen eines Arbeitsblatts ändern möchten, können Sie die Eigenschaft Worksheet.Name verwenden.
Methoden
Bei einer Methode handelt es sich um eine Aktion, die ein Objekt ausführen kann. Sie wissen vermutlich, dass das im Excel-Fenster angezeigte Arbeitsblatt als das aktive Arbeitsblatt bezeichnet wird. Im Excel-VBA-Code können Sie auf ein bestimmtes Arbeitsblatt verweisen, indem Sie zunächst seine Activate-Methode aufrufen. Wenn die Activate-Methode ausgeführt wurde, wird das ihr zugeordnete Arbeitsblatt vor die anderen Arbeitsblätter in Excel verschoben und kann bearbeitet werden.
Wie Eigenschaften werden Methoden mithilfe der Punktnotation aufgerufen. Wenn Sie z. B. alle Formeln in einem Arbeitsblatt neu berechnen möchten, rufen Sie die Worksheet.Calculate-Methode auf.
Ereignisse
So wie es sich bei einer Eigenschaft um ein quantifizierbares Attribut für ein Objekt und bei einer Methode um eine Aktion handelt, die ein Objekt ausführen kann, ist ein Ereignis eine Aktion, deren Ausführung ein Objekt „erkennt“. Excel 2003 weiß z. B. bei den folgenden Ereignissen (wie bei einer Vielzahl von weiteren Ereignissen), dass sie aufgetreten sind:
- Eine Arbeitsmappe wird geöffnet oder geschlossen.
- Ein Arbeitsblatt wird aktiviert oder deaktiviert.
- Eine Arbeitsmappe wird gespeichert.
- Es wird auf ein Diagramm geklickt.
- Eine Taste (oder Tastenkombination) wird gedrückt.
- In einer Zelle werden Daten eingegeben.
- Die Formeln in einem Arbeitsblatt werden neu berechnet.
- Ein Hyperlink wird geöffnet.
In Excel gibt es eine Reihe von Ereignishandlern oder Coderoutinen, die auf bestimmte Aktionen achten. Wenn eine dieser Aktionen ausgeführt wird und Sie angegeben haben, wie Excel auf dieses Ereignis reagieren soll, führt Excel den Code im Ereignishandler aus. Wenn Excel z. B. nach dem Erstellen einer neuen Arbeitsmappe alle geöffneten Arbeitsmappen in überlappenden Fenstern anordnen soll, können Sie den folgenden Ereignishandler erstellen:
Private Sub App_NewWorkbook(ByVal Wb As Workbook)
Application.Windows.Arrange xlArrangeStyleCascade
End Sub
Machen Sie sich keine Sorgen, wenn Sie nicht genau wissen, was die einzelnen Elemente in der Ereignishandlerroutine bedeuten. Betrachten Sie hier nur die mittlere Codezeile, in der Excel angewiesen wird, die Fenster überlappend anzuordnen. Sie können dieses Ergebnis auch mit Menübefehlen in Excel erhalten (Menü Fenster, Befehl Anordnen, Unterbefehl Überlappend). Wenn es sich jedoch um eine Aktion handelt, die immer bei einem bestimmten Ereignis ausgeführt werden soll, können Sie sie mit VBA automatisch ausführen – und eine Menge Arbeit sparen.
Auflistungen
Das letzte Element der objektorientierten Programmierung, das Sie kennen sollten, ist die Auflistung. Wie der Name bereits andeutet, handelt es sich dabei um eine Gruppe von Objekten des gleichen Typs, die in einem anderen Objekt enthalten sind. Eine Arbeitsmappe enthält z. B. eine Auflistung mit einem oder mehreren Arbeitsblättern. Wenn Sie die gleiche Änderung an allen Arbeitsblättern in einer Arbeitsmappe vornehmen möchten, können Sie die einzelnen Arbeitsblätter in der Auflistung durchgehen und die Änderung programmgesteuert vornehmen.
Wenn Sie bereits Programme erstellt haben, kennen Sie vermutlich die For…Next-Schleife, mit der Sie Anweisungen wie in der folgenden Sequenz mehrfach wiederholen können. (In diesem Beispiel wird der Verzeichnispfad der aktiven Arbeitsmappe dem rechten Bereich der Fußzeile auf den ersten drei Arbeitsblättern hinzugefügt.)
For i = 1 to 3
Worksheets(i).PageSetup.RightFooter = Path
Next i
Das Problem bei der Hartcodierung (Zuweisen eines festgelegten Werts) der oberen Grenze für diese For…Next-Schleife liegt darin, dass Sie den Code jedes Mal ändern müssen, wenn Sie ein Arbeitsblatt hinzufügen oder löschen. Dies ist einmal oder zweimal kein großes Problem, wenn Sie jedoch mit umfangreichem Code arbeiten, ist es unvermeidbar, dass Sie an einigen Stellen nicht an die Änderungen denken. Dies führt zu Fehlern, die Sie anschließend beheben müssen. Darüber hinaus kann es sogar vorkommen, dass diese Fehler nicht bemerkt werden, bis der Korrekturleser feststellt, dass die ersten 500 gedruckten Versionen des Jahresberichts nicht richtig formatiert sind (und Sie sich bereits am Strand entspannen und das Handy ausgeschaltet haben).
Sie können mithilfe von Code ermitteln, wie viele Arbeitsblätter eine Arbeitsmappe enthält, es gibt jedoch noch eine einfachere Möglichkeit: Verwenden Sie einfach eine For Each…Next-Schleife. Eine For Each…Next-Schleife ermittelt die Anzahl der Objekte in einer Auflistung, z. B. Arbeitsblätter in einer Arbeitsmappe, und geht die Instanzen einzeln durch. Mit diesem Verfahren kann der obenstehende Code wie folgt geschrieben werden:
For Each Wksht in Worksheets
Wksht.PageSetup.RightFooter = Path
Next Wksht
Anstatt den Wert in einer normalen For…Next-Schleife zu inkrementieren, sucht die For Each…Next-Schleife einfach nach dem nächsten Element in der Worksheets-Auflistung und hält an, wenn kein Element gefunden wird.
Der Visual Basic-Editor und die Fenster des Editors
Der Visual Basic-Editor zeigt unterschiedliche Informationen in einer Reihe von Fenstern an. Mit den folgenden Fenstern sollten Sie vertraut sein, wenn Sie anfangen, selbst Makros zu schreiben: Projekt-Explorer, Eigenschaften und Code.
Fenster „Projekt-Explorer“
Wenn Sie den Visual Basic-Editor direkt öffnen, können Sie im Fenster Projekt-Explorer das zu bearbeitende Makro auswählen. Im Projekt-Explorer werden alle Projekte (Codegruppen) und die darin enthaltenen Makros in einer Strukturansicht angezeigt. Diese ist mit der Strukturansicht in Windows® Explorer vergleichbar. Bei den Stamm- oder Basisobjekten in der Strukturansicht handelt es sich um die aktuelle Arbeitsmappe, in der Sie gerade arbeiten, sowie um weitere geöffnete Arbeitsmappen oder Add-Ins.
Die in VBA-Projekten verwendeten Elemente sind in einem eigenen Ordner in den einzelnen Projekten gespeichert. Dabei handelt es sich u. a. um die folgenden Elemente:
- Objekte (wie weiter oben in diesem Artikel beschrieben)
- Module, die den Makrocode für ein Arbeitsblatt enthalten
- Klassenmodule, d. h. Definitionen der benutzerdefinierten Objekte, die für eine Arbeitsmappe erstellt wurden
- Benutzerformulare, die eine sichtbare Oberfläche bereitstellen, in der Sie grafische Steuerelemente wie Schaltflächen, Bilder und Textbereiche platzieren können
Im folgenden Beispiel ist die aktuelle Arbeitsmappe als VBAProject gekennzeichnet. Die drei Arbeitsblätter in der Arbeitsmappe (Tabelle1, Tabelle2 und Tabelle3) sowie die ganze Arbeitsmappe (DieseArbeitsmappe) werden im Ordner Microsoft Excel Objekte angezeigt. Alle aufgezeichneten oder in VBA programmierten Makros werden im Ordner Module angezeigt. Klassenmodule und Benutzerformulare werden im Ordner Klassenmodule bzw. Formulare angezeigt.

Fenster „Eigenschaften“
Direkt unter dem Fenster Projekt-Explorer befindet sich das Fenster Eigenschaften, in dem die unterschiedlichen Eigenschaften für das ausgewählte Objekt angezeigt und geändert werden können. Bei Modulen ist im Allgemeinen nur die Name-Eigenschaft verfügbar. Arbeitsblätter umfassen zusätzliche Eigenschaften, die geändert werden können, z. B. StandardWidth und DisplayPageBreaks. Eigenschaften werden in den meisten Fällen beim Arbeiten mit Formularen im Fenster Eigenschaften geändert.
Hinweis Der Name, der im Fenster Eigenschaften im Eigenschaftenfeld Name für ein Objekt angezeigt wird entspricht nicht immer dem Namen des entsprechenden Objekts in Excel. Die beiden Namen können über eine gewisse Ähnlichkeit verfügen, sie können jedoch aufgrund der Standardbenennungsregeln, die der Visual Basic-Editor für Objekte verwendet, auch abweichen. (Namen dürfen z. B. keine Leerzeichen enthalten, sie müssen mit einem Buchstaben beginnen, dürfen nicht mit einem reservierten Begriff übereinstimmen und dürfen nicht länger als 31 Zeichen sein.) Auch wenn die Namen abweichen, können sie intern verknüpft sein, um sicherzustellen, dass auf das richtige Objekt verwiesen wird.
Fenster „Code“
Das Fenster Code ist das größte Fenster im Visual Basic-Editor und enthält oben zwei Dropdownfelder. Mit dem linken Dropdownfeld – dem Feld Objekt – können Sie ein zu bearbeitendes Objekt auswählen. Wenn Sie nur mit Code arbeiten, wird in diesem Feld das Standardobjekt Allgemein angezeigt. Im zweiten Dropdownfeld – dem Feld Prozedur – können einzelne Makros im aktuellen Modul ausgewählt werden. Wenn Makros zum Modul hinzugefügt oder gelöscht werden, werden sie auch aus dem Feld Prozedur gelöscht bzw. dort hinzugefügt.

Sie können auch mithilfe der NACH-OBEN- und der NACH-UNTEN-TASTE einen Bildlauf durch die Codelisten durchführen, bis Sie das gewünschte Makro gefunden haben. Während des Bildlaufs durch den Code wird das Feld Prozedur aktualisiert, sodass die Informationen zum aktuellen Makro angezeigt werden.
Weitere Informationen
Wenn Sie nun eigene Excel-Makros erstellen möchten, finden Sie detaillierte Anweisungen unter Super-Easy Guide to the Microsoft Office Excel 2003 Object Model (nur auf Englisch verfügbar).