Erste Schritte mit VBA in Office
Müssen Sie 50 Tabellen in Word wiederholt bereinigen? Möchten Sie, dass der Benutzer von einem bestimmten Dokument zu einer Eingabe aufgefordert wird, wenn das Dokument geöffnet wird? Bereitet es Ihnen Schwierigkeiten, Ihre Kontakte auf effiziente Weise aus Microsoft Outlook in eine Microsoft Excel-Tabelle zu übertragen?
Sie können diese Aufgaben ausführen und viel mehr erledigen, indem Sie Visual Basic for Applications (VBA) für Office verwenden– eine einfache, aber leistungsstarke Programmiersprache, die Sie zum Erweitern von Office-Anwendungen verwenden können.
Dieser Artikel richtet sich an erfahrene Office-Benutzer, die sich über VBA informieren und mehr darüber erfahren möchten, wie sie Office durch entsprechende Programmierung anpassen können.
Die Office-Anwendungssuite verfügt über einen umfassenden Satz an Features. Es gibt viele verschiedene Arten, Dokumente, E-Mail-Datenbanken, Formulare, Arbeitsblätter und Präsentationen zu erstellen, zu formatieren und zu bearbeiten. Die Stärke der VBA-Programmierung in Office liegt darin, dass Sie fast jeden Vorgang, der sich mit einer Maus, einer Tastatur oder über ein Dialogfeld ausführen lässt, auch mithilfe von VBA ausführen können. Sobald dies einmal mit VBA erfolgt ist, kann es genauso mehrere hundert Mal erfolgen. (Tatsächlich ist die Automatisierung von wiederkehrenden Aufgaben eines der Haupteinsatzgebiete von VBA in Office.)
Neben der Möglichkeit, tägliche Aufgaben mit VBA-Skripten zu beschleunigen, können Sie VBA verwenden, um neue Funktionen zu Office-Anwendungen hinzuzufügen oder für die Aufforderung und Interaktion mit dem Benutzer Ihrer Dokumente in der Art, die auf Ihre geschäftlichen Anforderungen speziell abgestimmt ist. Beispielsweise könnten Sie VBA-Code schreiben, mit dem eine Popup-Nachricht angezeigt wird, die die Benutzer zum Speichern eines Dokuments auf einem bestimmten Netzwerklaufwerk auffordert, sobald sie versuchen, es zum ersten Mal zu speichern.
In diesem Artikel werden einige der wichtigsten Gründe für den Einsatz der VBA-Programmierung beleuchtet. Außerdem werden die Programmiersprache VBA und die sofort einsatzbereiten Tools vorgestellt, mit denen Sie Ihre Lösungen bearbeiten können. Und schließlich enthält der Artikel einige Tipps und Tricks, um häufige Schwierigkeiten und Fehler bei der Programmierung zu vermeiden.
Hinweis
Haben Sie Interesse an der Entwicklung von Lösungen, mit denen die Funktionen von Office über mehrere Plattformen erweitert werden können? Schauen Sie sich das neue Office-Add-In-Modell an. Office-Add-Ins haben im Vergleich zu VSTO-Add-Ins und -Lösungen einen geringen Platzbedarf. Sie können sie mit fast jeder Web-Programmiertechnologie erstellen, z. B. HTML5, JavaScript, CSS3 und XML.
Einsatzmöglichkeiten und Gründe für VBA
Es gibt mehrere wichtige Gründe, die VBA-Programmierung in Office einzusetzen.
Automatisierung und Wiederholung
VBA ist äußerst wirkungsvoll und effizient, wenn es darum geht, wiederholt Formatierungs- oder Korrekturprobleme zu lösen. Einige Beispiele: Haben Sie schon einmal das Absatzformat ganz oben auf jeder Seite in Word geändert? Oder mussten Sie mehrere Tabellen umformatieren, die aus Excel in ein Word-Dokument oder eine E-Mail in Outlook eingefügt worden waren? Mussten Sie jemals die gleiche Änderung in mehreren Outlook-Kontakten vornehmen?
Wenn Sie eine Änderung häufiger als zehn- oder zwanzigmal vornehmen müssen, lohnt sich unter Umständen die Automatisierung mit VBA. Muss die Änderung sogar mehrere hundert Mal durchgeführt werden, ist die Automatisierung mit Sicherheit den Aufwand wert. Nahezu jede Formatierung oder Bearbeitung, die manuell möglich ist, kann auch mit VBA vorgenommen werden.
Erweiterungen der Benutzerinteraktion
Manchmal möchten Sie die Benutzer zu einer bestimmten Art der Interaktion mit der Office-Anwendung oder dem Office-Dokument bewegen, die nicht Teil der Standardanwendung ist. Beispielsweise könnten Sie Benutzer beim Öffnen, Speichern oder Drucken eines Dokuments zu einer bestimmten Aktion auffordern.
Interaktion zwischen Office-Anwendungen
Müssen Sie sämtliche Kontakte aus Outlook in Word kopieren und auf eine bestimmte Weise formatieren? Oder müssen Sie Daten aus Excel auf mehrere PowerPoint-Folien verschieben? Für manche Aufgaben reicht einfaches Kopieren und Einfügen nicht aus oder dauert zu lang. Verwenden Sie die VBA-Programmierung, um gleichzeitig mit den Details von zwei oder mehr Office-Anwendungen zu interagieren, und ändern Sie dann den Inhalt in einer Anwendung basierend auf dem Inhalt in einer anderen.
Andere Möglichkeiten
VBA-Programmierung ist eine leistungsstarke Methode, aber nicht immer der optimale Ansatz. In manchen Fällen ist es sinnvoller, andere Methoden einzusetzen, um ans Ziel zu kommen.
Die entscheidende Frage ist, ob es eine einfachere Möglichkeit gibt. Bevor Sie ein VBA-Projekt beginnen, prüfen Sie, ob Sie das Problem mit den integrierten Tools und Standardfunktionen lösen können. Wenn Sie beispielsweise einen zeitaufwändigen Bearbeitungs- oder Layoutvorgang haben, könnten Sie das Problem mithilfe von Formaten oder Zugriffstasten lösen. Können Sie die Aufgabe einmal ausführen und dann mit STRG+Y (Wiederholen) wiederholen? Können Sie ein neues Dokument mit dem richtigen Format oder der richtigen Vorlage erstellen und anschließend den Inhalt in das neue Dokument kopieren?
Office-Anwendungen sind äußerst leistungsstark. Vielleicht ist bereits die richtige Lösung für Sie vorhanden. Nehmen Sie sich etwas Zeit, und machen Sie sich eingehender mit den Funktionen von Office vertraut, bevor Sie sich an die Programmierung machen.
Bevor Sie ein VBA-Projekt beginnen, sollten Sie die Gewissheit haben, dass Sie genügend Zeit zum Arbeiten mit VBA haben. Programmieren erfordert Konzentration und kann unvorhersehbar sein. Besonders als Anfänger sollten Sie sich nur dann für das Programmieren entscheiden, wenn Sie Zeit haben, um sorgfältig arbeiten zu können. Wenn Sie versuchen, "schnell einmal" ein Skript zu schreiben, um unter Termindruck ein Problem zu lösen, kann dies zu Stress führen. Wenn Sie in Eile sind, nutzen Sie am besten herkömmliche Methoden, auch wenn sie Ihnen monoton vorkommen und eine Aneinanderreihung sich ständig wiederholender Schritte bedeuten.
VBA-101-Programmierung
Verwenden von Code, damit Anwendungen bestimmte Vorgänge ausführen
Sie denken vielleicht, dass das Schreiben von Code rätselhaft oder schwierig ist, die Grundprinzipien basieren aber auf normalem logischen Denken und sind leicht verständlich. Microsoft Office-Programme werden derart entwickelt, dass sie so genannte Objekte verfügbar machen, die Anweisungen erhalten können, so wie ein Telefon, das über Tasten verfügt, über die Sie mit dem Telefon interagieren können. Wenn Sie eine Taste drücken, erkennt das Telefon die Anweisung und schließt die entsprechende Nummer in der Reihenfolge ein, in der Sie wählen. Bei der Programmierung interagieren Sie mit der Anwendung, indem Sie Anweisungen an verschiedene Objekte in der Anwendung senden. Diese Objekte sind umfangreich, weisen aber Grenzen auf. Die Objekte können nur Vorgänge ausführen, für die sie entwickelt wurden, und sie führen nur Vorgänge aus, die Sie den Objekten anweisen.
Ein Beispiel: Der Benutzer öffnet ein Dokument in Word, nimmt einige Änderungen vor, speichert das Dokument und schließt es. Auf die VBA-Programmierung übertragen bedeutet dies, Word macht ein Document-Objekt verfügbar. Mithilfe von VBA-Code können Sie dem Document-Objekt Anweisungen für Aktionen wie Öffnen, Speichern oder Schließen erteilen.
Im folgenden Abschnitt wird erklärt, wie Objekte organisiert und beschrieben werden.
Das Objektmodell
Entwickler organisieren Programmierungsobjekte in einer Hierarchie, und diese Hierarchie wird als das Objektmodell der Anwendung bezeichnet. Word weist z. B. ein Application-Objekt auf oberster Ebene auf, das ein Document-Objekt enthält. Das Document-Objekt enthält Paragraph-Objekte und so weiter. Objektmodelle spiegeln ungefähr, was auf der Benutzeroberfläche angezeigt wird. Sie sind eine konzeptionelle Übersicht über die Anwendung und deren Funktionen.
Die Definition eines Objekts wird als Klasse bezeichnet, diese beiden Begriffe werden daher möglicherweise synonym verwendet. Technisch gesehen ist eine Klasse die Beschreibung oder Vorlage, die zum Erstellen oder Instanziieren eines Objekts verwendet wird.
Sobald ein Objekt vorhanden ist, können Sie es bearbeiten, indem Sie seine Eigenschaften festlegen und seine Methoden aufrufen. Wenn Sie sich das Objekt wie ein Nomen vorstellen, so sind die Eigenschaften die Adjektive, die das Nomen beschreiben, und die Methoden sind die Verben, die das Nomen animieren. Durch Ändern einer Eigenschaft wird auch die Qualität der Darstellung oder das Verhalten des Objekts geändert. Durch Aufrufen der Objektmethoden wird bewirkt, dass das Objekt eine Aktion ausführt.
Der VBA-Code in diesem Artikel wird in einer geöffneten Office-Anwendung ausgeführt, sodass viele der vom Code manipulierten Objekte bereits laufen (z. B. die Anwendung selbst, das Arbeitsblatt in Excel, das Dokument in Word, die Präsentation in PowerPoint, das Explorer- und das Folder-Objekt in Outlook). Nachdem Sie sich mit dem grundlegenden Aufbau des Objektmodells und den wichtigsten Eigenschaften der Anwendung vertraut gemacht haben, auf denen der aktuelle Status der Anwendung basiert, können Sie damit beginnen, die betreffende Office-Anwendung mithilfe von VBA in Office zu erweitern und zu verändern.
Methoden
In Word können Sie beispielsweise die Eigenschaften ändern und die Methoden des aktuellen Word-Dokuments aufrufen, indem Sie die ActiveDocument-Eigenschaft des Application-Objekts verwenden. Diese ActiveDocument-Eigenschaft gibt einen Verweis auf das Document-Objekt zurück, das in der Word-Anwendung derzeit aktiv ist. „Gibt einen Verweis zurück auf“ bedeutet „gibt Ihnen Zugriff auf“.
Der folgende Code zeigt genau, was er tut: Er speichert das aktive Dokument in der Anwendung.
Application.ActiveDocument.Save
Lesen Sie den Code von links nach rechts: "Rufen Sie in dieser Anwendung mit dem Dokument, auf das von ActiveDocument verwiesen wird, die Save-Methode auf." Beachten Sie, dass Save die einfachste Methode ist. Es sind keine detaillierten Anweisungen von Ihnen erforderlich. Sie weisen ein Documentan, zu speichern, und es sind keine weiteren Eingaben von Ihrer Seite erforderlich.
Wenn eine Methode weitere Informationen erfordert, werden diese Details als Parameter bezeichnet. Der folgende Code führt die SaveAs-Methode aus, die einen neuen Namen für die Datei benötigt.
Application.ActiveDocument.SaveAs ("New Document Name.docx")
Die Werte, die nach dem Methodennamen in Klammern angegeben werden, sind die Parameter. In diesem Fall ist der neue Name der Datei ein Parameter für die SaveAs-Methode.
Eigenschaften
Zum Festlegen einer Eigenschaft wird dieselbe Syntax wie zum Lesen einer Eigenschaft verwendet. Der folgende Code führt eine Methode aus, um Zelle A1 in Excel zu markieren und eine Eigenschaft festzulegen, mit der etwas in diese Zelle eingefügt wird.
Application.ActiveSheet.Range("A1").Select
Application.Selection.Value = "Hello World"
Die erste Herausforderung bei der VBA-Programmierung besteht darin, ein Gefühl für das Objektmodell jeder Office-Anwendung zu bekommen und die Objekt-, Methoden- und Eigenschaftensyntax zu verstehen. Die Objektmodelle sind in allen Office-Anwendungen ähnlich, beziehen sich aber jeweils auf die Dokument- und Objektarten, die verändert werden.
In der ersten Zeile des Codeausschnitts steht das Application-Objekt, dieses Mal Excel, und dann das ActiveSheet-Objekt, das Zugriff auf das aktive Arbeitsblatt ermöglicht. Danach ist ein Begriff, der nicht so vertraut ist, Range, was bedeutet, dass ein Zellbereich auf diese Weise definiert wird. Der Code weist Range an, sich selbst mit nur A1 als definierten Zellsatz zu erstellen. In anderen Worten: Die erste Codezeile definiert ein Objekt, und zwar „Range“, und führt eine Methode dafür aus, um dieses auszuwählen. Das Ergebnis wird automatisch in einer anderen Eigenschaft der Application mit dem Namen Selection gespeichert.
In der zweiten Codezeile wird die Value-Eigenschaft von Selection auf den Text "Hello World" festgelegt. Der Wert wird in der Zelle A1 angezeigt.
Der einfachste VBA-Code greift einfach nur auf Objekte in der Office-Anwendung zu, mit der Sie arbeiten und legt Eigenschaften fest. Beispielsweise können Sie Zugriff auf die Zeilen in einer Tabelle in Word erhalten und die Formatierung im VBA-Skript ändern.
Das hört sich einfach an, kann aber unglaublich hilfreich sein. Sobald Sie diesen Code schreiben können, steht Ihnen die gesamte Leistungsfähigkeit der Programmierung zur Verfügung, um dieselben Änderungen in mehreren Tabellen oder Dokumenten bzw. nach einer bestimmten Logik oder Bedingung vorzunehmen. Für einen Computer ist es egal, ob er 1000 Änderungen durchführt oder 10. Es gibt also bei größeren Dokumenten oder schwierigeren Problemstellungen ein enormes Einsparpotenzial, da Sie mit VBA sehr viel Zeit sparen können.
Makros und der Visual Basic-Editor
Nun, da Sie etwas darüber wissen, wie Office-Anwendungen ihre Objektmodelle darstellen, möchten Sie sicher selbst Objektmethoden aufrufen, Objekteigenschaften festlegen und auf Objektereignisse reagieren. Dazu müssen Sie Code an einer Stelle und mit einer Vorgehensweise schreiben, die von Office "verstanden" wird – das ist in der Regel der Visual Basic-Editor. Obwohl es standardmäßig installiert ist, wissen viele Benutzer nicht, dass es überhaupt verfügbar ist, bis es in der Multifunktionsleiste aktiviert wird.
Alle Office-Anwendungen verwenden das Menüband. Eine der Registerkarten auf dem Menüband ist die Registerkarte Entwickler, über die Sie den Visual Basic-Editor und andere Tools für Entwickler aufrufen können. Da in Office die Registerkarte Entwickler standardmäßig nicht angezeigt werden, müssen Sie sie mithilfe des folgenden Verfahrens aktivieren:
So aktivieren Sie die Registerkarte „Entwickler“
Klicken Sie auf der Registerkarte Datei auf Optionen, um das Dialogfeld Optionen zu öffnen.
Wählen Sie auf der linken Seite des Dialogfelds Menüband anpassen aus.
Wählen Sie auf der linken Seite des Dialogfelds unter Befehle auswählen den Eintrag Häufig verwendete Befehle aus.
Klicken Sie auf der rechten Seite des Dialogfelds unter Menüband anpassen im Dropdown-Listenfeld auf Hauptregisterkarten, und aktivieren Sie dann das Kontrollkästchen Entwickler.
Wählen Sie OK aus.
Hinweis
In Office 2007 konnten Sie die Registerkarte Entwickler anzeigen, indem Sie die Office-Schaltfläche und dann Optionen auswählten und anschließend im Dialogfeld Optionen in der Kategorie Häufig verwendet das Kontrollkästchen Registerkarte "Entwicklertools" in der Menüband anzeigen aktivierten.
Nachdem Sie die Registerkarte Entwickler aktiviert haben, finden Sie die Schaltflächen für Visual Basic und Makros auf den ersten Blick.
Abbildung 1: Schaltflächen auf der Registerkarte „Entwicklertools“
Überlegungen zur Sicherheit
Zum Schutz von Office-Benutzern vor Viren und gefährlichen Makrocode ist es nicht möglich, Makrocode in einem normalen Office-Dokument mit einer normalen Dateierweiterung zu speichern. Stattdessen müssen Sie den Code in einer Datei mit einer Spezialerweiterung speichern. Beispielsweise können Sie Makros nicht in einem normalen Word-Dokument mit der Erweiterung DOCX speichern, sondern müssen ein spezielles Word-Dokument mit Makros (Erweiterung DOCM) verwenden.
Beim Öffnen einer DOCM-Datei verhindert die Office-Sicherheit u. U. dennoch die Ausführung der Makros im Dokument, möglicherweise, ohne eine entsprechende Meldung auszugeben. Überprüfen Sie die Einstellungen und Optionen im Sicherheitscenter für alle Office-Anwendungen. Gemäß Standardeinstellung ist die Makroausführung deaktiviert, Sie erhalten aber eine Warnung, dass Makros deaktiviert wurden, und haben die Möglichkeit, die Makros für das jeweilige Dokument zu aktivieren.
Sie können bestimmte Ordner festlegen, in denen Makros ausgeführt werden können, indem Sie „Vertrauenswürdige Speicherorte“, „Vertrauenswürdige Dokumente“ oder „Vertrauenswürdige Herausgeber“ erstellen. Die praktischste Option ist die Verwendung von vertrauenswürdige Herausgebern, die bei digital signierten Dokumenten funktioniert, die Sie verteilen. Weitere Informationen zu den Sicherheitseinstellungen in einer bestimmten Office-Anwendung erhalten Sie, wenn Sie im Dialogfeld Optionen die Option Trust Center und dann Einstellungen für das Trust Center auswählen.
Hinweis
In einigen Office-Anwendungen wie Outlook werden Makros standardmäßig in einer Mastervorlage auf dem lokalen Computer gespeichert. Diese Strategie vermindert zwar lokale Sicherheitsprobleme auf dem eigenen Computer beim Ausführen eigener Makros, macht allerdings eine Bereitstellungsstrategie zur Verteilung des Makros erforderlich.
Aufzeichnen eines Makros
Wenn Sie auf der Registerkarte Entwickler die Schaltfläche Makro auswählen, wird das Dialogfeld Makros geöffnet, in dem Sie auf VBA-Unterroutinen oder -Makros in einem bestimmten Dokument oder einer bestimmten Anwendung zugreifen können. Über die Schaltfläche Visual Basic öffnen Sie den Visual Basic-Editor, in dem Sie VBA-Code erstellen und bearbeiten.
Eine weitere Schaltfläche auf der Registerkarte Entwickler in Word und Excel ist Makro aufzeichnen, die automatisch VBA-Code generiert, der Ihre in der Anwendung durchgeführten Aktionen reproduziert. Makro aufzeichnen ist ein großartiges Tool, das Sie verwenden können, um mehr über VBA zu erfahren. Durch Lesen des generierten Codes erhalten Sie einen Einblick in VBA und vertiefen sowohl Ihr Wissen über Office als Benutzer als auch Ihr Wissen als Programmierer. Der einzige Nachteil ist, dass der generierte Code verwirrend sein kann, da der Makro-Editor einige Annahmen über Ihre Absichten vornehmen muss, und diese sind möglicherweise nicht korrekt.
So zeichnen Sie ein Makro auf
Öffnen Sie in Excel eine neue Arbeitsmappe, und wählen Sie auf dem Menüband die Registerkarte Entwickler aus. Wählen Sie Makro aufzeichnen aus, und akzeptieren Sie alle Standardeinstellungen im Dialogfeld Makro aufzeichnen, auch Makro1 als Name für das Makro und Diese Arbeitsmappe als Speicherort.
Wählen Sie OK aus, um die Aufzeichnung des Makros zu starten. Beachten Sie, wie sich der Schaltflächentext in Aufzeichnung beenden ändert. Wählen Sie die Schaltfläche aus, sobald Sie alle Aktionen abgeschlossen haben, die Sie aufzeichnen möchten.
Wählen Sie Zelle B1 aus, und geben Sie die typische erste Zeichenfolge jedes Programmierers ein: Hello World. Beenden Sie die Eingabe, und sehen Sie sich die Schaltfläche Aufzeichnung beenden an: Sie ist ausgegraut, weil Excel wartet, bis Sie die Eingabe in der Zelle beenden.
Wählen Sie Zelle B2 aus, um die Aktion in Zelle B1 abzuschließen, und dann Aufzeichnung beenden.
Wählen Sie auf der Registerkarte Entwickler die Option Makros, dann ggf. Makro1 und anschließend Bearbeiten aus, um den Code von Makro1 im Visual Basic-Editor anzuzeigen.
Abbildung 2: Makrocode im Visual Basic-Editor
Der Code im Einzelnen
Das von Ihnen erstellte Makro sollte dem folgenden Code ähneln.
Sub Macro1()
'
' Macro1 Macro
'
'
Range("B1").Select
ActiveCell.FormulaR1C1 = "Hello World"
Range("B2").Select
End Sub
Achten Sie auf die Ähnlichkeiten und auch die Unterschiede gegenüber dem vorherigen Codeausschnitt zum Auswählen von Text in Zelle A1. In diesem Code wird Zelle B1 ausgewählt und dann die Zeichenfolge "Hello World" in die so aktivierte Zelle übernommen. Die Anführungszeichen um den Text kennzeichnen einen Zeichenfolgenwert gegenüber einem numerischen Wert.
Können Sie sich noch erinnern, wie Sie Zelle B2 ausgewählt haben, um die Schaltfläche Aufzeichnung beenden erneut anzuzeigen? Diese Aktion wird auch als Codezeile angezeigt. Die Makroaufzeichnung zeichnet jeden Tastaturanschlag auf.
Die Codezeilen, die mit einem Apostroph beginnen und im Editor grün dargestellt werden, sind Kommentare, die entweder den Code genauer erklären oder Sie und andere Programmierer an den Zweck des Codes erinnern. In VBA wird jede Zeile bzw. jeder Teil einer Zeile ignoriert, die bzw. der mit einem einfachen Anführungszeichen beginnt. Das klare und sinnvolle Kommentieren des Codes ist ein wichtiges Thema, das aber den Umfang dieses Artikels sprengen würde. Nachfolgende Verweise auf diesen Code im Artikel enthalten diese vier Kommentarzeilen nicht.
Wenn die Makroaufzeichnung den Code generiert, wird ein komplexer Algorithmus verwendet, um die beabsichtigten Methoden und Eigenschaften zu ermitteln. Wenn Sie eine bestimmte Eigenschaft nicht erkennen, stehen Ihnen zahlreiche Hilfsmittel zur Verfügung. Beispielsweise verweist der von der Makroaufzeichnung generierte Code Ihres Makros auf die FormulaR1C1-Eigenschaft. Ihnen ist nicht ganz klar, was das bedeutet?
Hinweis
Beachten Sie, dass das Application-Objekt in allen VBA-Makros impliziert wird. Der von Ihnen aufgezeichnete Code funktioniert mit Application. am Anfang jeder Zeile.
Verwenden der Entwicklerhilfe
Wählen Sie FormulaR1C1 im aufgezeichneten Makro aus, und drücken Sie F1. Das Hilfesystem führt eine schnelle Suche durch, stellt fest, dass die entsprechenden Themen sich im Excel-Entwicklerabschnitt der Excel-Hilfe befinden und führt die FormulaR1C1-Eigenschaft auf. Sie können den Link auswählen, um weitere Informationen zu der Eigenschaft zu erhalten. Bevor Sie dies tun, sollten Sie jedoch den Link Referenz zum Excel-Objektmodell im unteren Bereich des Fensters beachten. Wählen Sie den Link aus, um eine lange Liste von Objekten anzuzeigen, die Excel in seinem Objektmodell zum Beschreiben der Arbeitsblätter und ihrer Komponenten verwendet.
Wählen Sie eine der Optionen aus, um die Eigenschaften und Methoden, die für das jeweilige Objekt gelten, zusammen mit Querverweisen auf unterschiedliche verwandte Optionen anzuzeigen. Viele Hilfeeinträge weisen auch kurze Codebeispiele auf, die Ihnen helfen können. Sie können z. B. den Links im Borders-Objekt folgen, um zu sehen, wie ein Rahmen in VBA festgelegt wird.
Worksheets(1).Range("A1").Borders.LineStyle = xlDouble
Bearbeiten von Code
Der Borders-Code sieht anders aus als das aufgezeichnete Makro. Eines kann bei einem Objektmodell etwas verwirrend sein, nämlich die Tatsache, dass es mehrere Möglichkeiten gibt, ein Objekt (in diesem Beispiel die Zelle A1) zu adressieren.
Eine der besten Möglichkeiten, das Programmieren zu erlernen, ist manchmal, kleinere Änderungen an funktionierendem Code vorzunehmen und zu sehen, was passiert. Versuchen Sie es. Öffnen Sie Makro1 im Visual Basic-Editor, und ändern Sie den Code wie folgt.
Sub Macro1()
Worksheets(1).Range("A1").Value = "Wow!"
Worksheets(1).Range("A1").Borders.LineStyle = xlDouble
End Sub
Tipp
Verwenden Sie beim Arbeiten mit Code wo möglich Kopieren und Einfügen, um Eingabefehler zu vermeiden.
Sie müssen den Code nicht speichern, um ihn auszuprobieren. Kehren Sie also zum Excel-Dokument zurück, wählen Sie Makros auf der Registerkarte Developer aus, wählen Sie Macro1und dann Ausführenaus. Die Zelle A1 enthält jetzt den Text Wow! und ist von einem doppellinigen Rahmen umgeben.
Abbildung 3: Ergebnisse Ihres ersten Makros
Sie haben durch eine Kombination aus einer Makroaufzeichnung, dem Lesen der Objektmodelldokumentation und einfacher Programmierung ein funktionierendes VBA-Programm erstellt. Herzlichen Glückwunsch!
Es hat nicht funktioniert? Lesen Sie weiter, um Vorschläge für das Debuggen in VBA zu erhalten.
Tipps und Tricks für die Programmierung
Mit Beispielen anfangen
Es gibt unzählige VBA-Programmierer. Bei einer Websuche finden Sie fast immer ein Beispiel für VBA-Code mit einer ähnlichen Funktion, wie Sie benötigen. Wenn Sie kein gutes Beispiel finden, können Sie die Aufgabe in kleinere Komponenten unterteilen und nach diesen suchen. Oder Sie können sich eine ähnliche, aber gängigere Problemstellung überlegen. Wenn Sie mit einem Beispiel beginnen, können Sie sich viele Stunden Arbeit sparen.
Das bedeutet aber nicht, dass im Web kostenloser und sorgfältig durchdachter Code nur auf Sie wartet. Es kann durchaus sein, dass der gefundene Code Fehler enthält. Die Beispiele, die Sie online oder in der VBA-Dokumentation finden, sollen Ihnen lediglich den Einstieg erleichtern. Vergessen Sie nicht: Das Erlernen der Programmierung kostet Zeit und Überlegung. Bevor Sie in letzter Minute eine andere Lösung für Ihr Problem finden müssen, sollten Sie sich lieber von Anfang an fragen, ob VBA die richtige Wahl für die Aufgabenstellung ist.
Das Problem vereinfachen
Die Programmierung wird schnell äußerst kompliziert. Vor allem als Anfänger ist es wichtig, das Problem in die kleinstmöglichen logischen Einheiten zu zerlegen und dann jeden Teil für sich zu schreiben und zu testen. Wenn Sie angesichts des Codes vor Ihnen den Überblick verlieren, sollten Sie die Arbeit unterbrechen und an etwas anderes denken. Wenn Sie danach wieder zu Ihrer Aufgabenstellung zurückkehren, kopieren Sie einen kleinen Teil des Problems in ein neues Modul, lösen Sie diesen Teil, erstellen Sie funktionsfähigen Code, und testen Sie diesen. Machen Sie dann mit dem nächsten Teil weiter.
Fehler und Debuggen
Es gibt im Wesentlichen zwei Arten von Programmierfehlern: Syntaxfehler, die gegen Grammatikregeln der Programmiersprache verstoßen, und Laufzeitfehler, die zwar syntaktisch korrekt sind, aber beim Ausführen des Codes einen Fehler verursachen.
Syntaxfehler sind zwar manchmal schwierig zu beheben, dafür aber umso leichter zu finden. Im Visual Basic-Editor werden Sie akustisch und visuell auf Syntaxfehler im Code aufmerksam gemacht.
Zeichenfolgenwerte müssen in VBA in doppelte Anführungszeichen eingeschlossen werden. Um herauszufinden, was geschieht, wenn Sie stattdessen einfache Anführungszeichen verwenden, kehren Sie zum Visual Basic-Editor zurück, und ersetzen Sie die Zeichenfolge "Wow!" im Codebeispiel durch "Wow!". (d. h. das Wort Wow wird in einfache Anführungszeichen gesetzt). Wenn Sie die nächste Zeile auswählen, reagiert der Visual Basic-Editor. Der Fehler "Kompilierungsfehler: Ausdruck erwartet" ist nicht besonders hilfreich, aber die Zeile, die den Fehler generiert, wird rot angezeigt, um Sie darauf hinzuweisen, dass ein Syntaxfehler in dieser Zeile vorliegt und dass das Programm deshalb nicht ausgeführt wird.
Wählen Sie OK aus, und ändern Sie den Text wieder in "Wow!".
Laufzeitfehler sind schwieriger zu finden, weil die Programmiersyntax an sich korrekt aussieht, der Code aber beim Versuch, ihn auszuführen, einen Fehler verursacht.
Öffnen Sie z. B. den Visual Basic-Editor und ändern Sie im Makro den Eigenschaftenname Value in "ValueX", wodurch absichtlich ein Laufzeitfehler verursacht wird, da das Range-Objekt nicht über eine Eigenschaft mit dem Namen "ValueX" verfügt. Wechseln Sie wieder in das Excel-Dokument, öffnen Sie das Dialogfeld Makros, und führen Sie Makro1 erneut aus. Es sollte ein Visual Basic-Meldungsfeld angezeigt werden, in dem der Laufzeitfehler mit dem Text "Objekt unterstützt diese Eigenschaft der Methode nicht" erläutert wird. Obwohl dieser Text klar ist, wählen Sie Debuggen aus, um mehr zu erfahren.
Wenn Sie zum Visual Basic-Editor zurückkehren, befindet sich dieser in einem speziellen Debugmodus, in dem die fehlerhafte Codezeile gelb markiert ist. Erwartungsgemäß ist die Zeile mit der ValueX-Eigenschaft hervorgehoben.
Sie können den VBA-Code während der Ausführung bearbeiten. Ändern Sie daher "ValueX" wieder zurück in Value, und wählen Sie die kleine grüne Wiedergabeschaltfläche unter dem Menü Debuggen aus. Das Programm sollte jetzt wieder normal ausgeführt werden.
Es empfiehlt sich, zu erfahren, wie Sie den Debugger bewusster für längere, komplexere Programme verwenden. Sie sollten auf jeden Fall erlernen, wie Haltepunkte festgelegt werden, um die Ausführung an einem Punkt zu beenden, an dem Sie sich den Code ansehen möchten, wie Uhren hinzugefügt werden, um die Werte unterschiedlicher Variablen und Eigenschaften beim Ausführen des Codes anzuzeigen, und wie der Code Zeile für Zeile durchlaufen wird. Diese Optionen sind alle im Menü Debuggen verfügbar, und fortgeschrittene Debug-Benutzer prägen sich in der Regel die dazu gehörenden Tastenkombinationen ein.
Referenzmaterial sinnvoll nutzen
Zum Öffnen der Entwicklerreferenz, die in die Office-Hilfe integriert ist, öffnen Sie die Hilfereferenz in einer beliebigen Office-Anwendung, indem Sie auf dem Menüband das Fragezeichen auswählen oder die Taste F1 drücken. Wählen Sie dann den Dropdownpfeil rechts neben der Schaltfläche Suchen aus, um die Inhalte zu filtern. Wählen Sie Entwicklerreferenz aus. Wenn Sie das Inhaltsverzeichnis im linken Bereich nicht sehen, wählen Sie das kleine Buchsymbol, um es zu öffnen, und klappen Sie dann die Objektmodellreferenz aus.
Abbildung 5: Das Filtern der Entwicklerhilfe gilt für alle Office-Anwendungen
Der Zeitaufwand für die Auseinandersetzung mit der Objektmodellreferenz zahlt sich aus. Wenn Sie die Grundlagen der VBA-Syntax und das Objektmodell für die verwendete Office-Anwendung verstanden haben, können Sie systematisch programmieren.
Selbstverständlich ist das Microsoft Office Developer Center ein exzellentes Portal für Artikel, Tipps und Informationen für die Entwicklercommunity.
In Foren und Gruppen suchen
Alle Programmierer kommen irgendwann trotz der Lektüre sämtlicher Referenzartikel und schlafloser Nächte, in denen sie die verschiedenen Möglichkeiten zur Lösung ihres Problems durchgehen, einfach nicht mehr weiter. Glücklicherweise gibt es im Internet eine Entwicklercommunity, deren Mitglieder sich gegenseitig bei Programmierproblemen helfen.
Suchen Sie einfach im Internet nach "office entwickler forum", um mehrere Diskussionsgruppen zu finden. Suchen Sie nach "office entwicklung" oder nach einer Beschreibung Ihres Problems, um auch Foren, Blogbeiträge und Artikel zu finden.
Wenn Sie alles in Ihrer Macht Stehende getan haben, um ein Problem zu lösen, scheuen Sie sich nicht, Ihre Frage in einem Entwicklerforum zu stellen. Diese Foren akzeptieren auch Beiträge unerfahrener Entwickler, und viele erfahrene Programmierer helfen sehr gern.
Beachten Sie bei der Veröffentlichung eines Beitrags in einem Entwicklerforum die folgenden Benimmregeln:
Suchen Sie vor der Veröffentlichung nach häufig gestellten Fragen oder Richtlinien, die eingehalten werden sollten. Achten Sie darauf, dass Ihr Beitrag diesen Richtlinien entspricht und dass Sie ihn im richtigen Bereich des Forums einstellen.
Fügen Sie ein klares und vollständiges Codebeispiel hinzu, und bearbeiten Sie den Code gegebenenfalls, um Ausschnitte aus einem längeren Codeabschnitt für andere zu erläutern.
Beschreiben Sie Ihr Problem möglichst klar und knapp, und fassen Sie alle Schritte zusammen, die Sie bereits zur Lösung des Problems unternommen haben. Nehmen Sie sich Zeit für die Formulierung Ihres Beitrags, insbesondere, wenn Sie nervös oder in Eile sind. Beschreiben Sie die Situation so, dass Ihre Leser sie beim ersten Lesen der Problembeschreibung auf Anhieb verstehen können.
Seien Sie höflich, und bringen Sie Ihre Wertschätzung zum Ausdruck.
Programmieren für Fortgeschrittene
In diesem kurzen Artikel konnten die Themen VBA und Programmierung zwar nur oberflächlich vorgestellt werden, er hat Ihnen aber hoffentlich dennoch den Einstieg erleichtert.
Im folgenden Abschnitt wird noch kurz auf einige weitere wichtige Themen eingegangen.
Variablen
In den einfachen Beispielen in diesem Artikel haben Sie mit Objekten gearbeitet, die bereits von der Anwendung erstellt worden waren. Sie können eigene Objekte erstellen, um Werte oder Verweise auf andere Objekte zu speichern und in Ihrer Anwendung vorübergehend zu verwenden. Solche Objekte werden als Variablen bezeichnet.
Um eine Variable in VBA zu verwenden, müssen Sie mithilfe einer Dim-Anweisung angeben, welchen Objekttyp die Variable darstellt. Anschließend legen Sie den Wert fest und verwenden sie zum Festlegen anderer Variablen oder Eigenschaften.
Dim MyStringVariable As String
MyStringVariable = "Wow!"
Worksheets(1).Range("A1").Value = MyStringVariable
Verzweigungen und Schleifen
Die einfachen Programme in diesem Artikel werden zeilenweise von oben nach unten ausgeführt. Die Programmierung wird jedoch gerade dadurch so leistungsfähig, dass Sie mithilfe von einzelnen oder mehreren Bedingungen selbst bestimmen können, welche Codezeilen ausgeführt wann werden sollen. Sie können diese Möglichkeiten noch erweitern, wenn Sie einen Vorgang beliebig oft wiederholen können. Beispielsweise ist der folgende Code eine Erweiterung von Makro1.
Sub Macro1()
If Worksheets(1).Range("A1").Value = "Yes!" Then
Dim i As Integer
For i = 2 To 10
Worksheets(1).Range("A" & i).Value = "OK! " & i
Next i
Else
MsgBox "Put Yes! in cell A1"
End If
End Sub
Geben Sie den Code in den Visual Basic-Editor ein, oder fügen Sie ihn ein, und führen Sie ihn dann aus. Befolgen Sie die Anweisungen in dem Nachrichtenfeld, das angezeigt wird, und ändern Sie den Text in Zelle A1 von Wow! in Yes!, und führen Sie dies erneut aus, um sich von der Leistungsfähigkeit von Schleifen zu überzeugen. In diesem Codeausschnitt werden Variablen, Verzweigungen und Schleifen veranschaulicht. Lesen Sie diesen genau durch, nachdem Sie ihn in Aktion gesehen haben, und versuchen Sie festzustellen, was bei jeder ausgeführten Zeile passiert.
Meine Office-Anwendungen: Beispielcode
Experimentieren Sie doch mit den folgenden Skripts, die jeweils ein Office-Problem aus der Praxis lösen.
Erstellen einer E-Mail in Outlook
Sub MakeMessage()
Dim OutlookMessage As Outlook.MailItem
Set OutlookMessage = Application.CreateItem(olMailItem)
OutlookMessage.Subject = "Hello World!"
OutlookMessage.Display
Set OutlookMessage = Nothing
End Sub
Es gibt Situationen, in denen Sie E-Mails in Outlook automatisieren möchten. Sie können dazu auch Vorlagen verwenden.
Löschen leerer Zeilen in einem Excel-Arbeitsblatt
Sub DeleteEmptyRows()
SelectedRange = Selection.Rows.Count
ActiveCell.Offset(0, 0).Select
For i = 1 To SelectedRange
If ActiveCell.Value = "" Then
Selection.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Next i
End Sub
Sie können eine Spalte von Zellen markieren und dieses Makro ausführen, um alle Zeilen in der markierten Spalte zu löschen, die eine leere Zelle enthalten.
Löschen leerer Textfelder in PowerPoint
Sub RemoveEmptyTextBoxes()
Dim SlideObj As Slide
Dim ShapeObj As Shape
Dim ShapeIndex As Integer
For Each SlideObj In ActivePresentation.Slides
For ShapeIndex = SlideObj.Shapes.Count To 1 Step -1
Set ShapeObj = SlideObj.Shapes(ShapeIndex)
If ShapeObj.Type = msoTextBox Then
If Trim(ShapeObj.TextFrame.TextRange.Text) = "" Then
ShapeObj.Delete
End If
End If
Next ShapeIndex
Next SlideObj
End Sub
Beachten Sie, dass dieser Code in einer Schleife alle Folien durchläuft und alle Textfelder löscht, die keinen Text enthalten. Die count-Variable wird immer kleiner statt größer, weil jedes Mal, wenn der Code ein Objekt löscht, das betreffende Objekt aus der Auflistung entfernt wird, wodurch die Anzahl sinkt.
Kopieren eines Kontakts aus Outlook in Word
Sub CopyCurrentContact()
Dim OutlookObj As Object
Dim InspectorObj As Object
Dim ItemObj As Object
Set OutlookObj = CreateObject("Outlook.Application")
Set InspectorObj = OutlookObj.ActiveInspector
Set ItemObj = InspectorObj.CurrentItem
Application.ActiveDocument.Range.InsertAfter (ItemObj.FullName & " from " & ItemObj.CompanyName)
End Sub
Dieser Code kopiert den derzeit geöffneten Kontakt in Outlook in das geöffnete Word-Dokument. Dieser Code funktioniert nur, wenn in Outlook ein Kontakt zur Ansicht geöffnet ist.
Support und Feedback
Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.