Erste Schritte mit VBA in Outlook 2010

Office 2010

Zusammenfassung: Dieser Artikel bietet Nichtprogrammierern eine Einführung in Möglichkeiten zum Erweitern von Microsoft Outlook 2010 durch Programmieren in Visual Basic für Applikationen (VBA). Dieses Thema enthält eine Übersicht über die Programmiersprache VBA, Anleitungen für den Zugriff auf VBA in Outlook 2010, eine ausführliche Lösung für eine praxisbezogene Problemstellung beim Programmieren in VBA für Outlook sowie Tipps zum Programmieren und Debuggen.

Müssen Ihre zahlreichen Kontakte in Outlook 2010 regelmäßig bereinigt werden? Haben auch Sie mit einer Flut von E-Mail-Anlagen zu kämpfen, die Sie alle einzeln auf Ihrer Festplatte speichern müssen? Möchten Sie aus bestimmten E-Mail-Nachrichten automatisch Kalenderelemente erstellen lassen? Überlegen Sie, wie Sie Kontakte aus Microsoft Outlook 2010 effizient in ein Microsoft Excel 2010-Arbeitsblatt übertragen können?

All dies und viel mehr können Sie mithilfe von Visual Basic für Applikationen (VBA) realisieren. VBA ist eine einfache, aber leistungsfähige Programmiersprache, mit der Sie Office 2010-Anwendungen durch neue Funktionen erweitern und wiederkehrende Aufgaben automatisieren können.

Dieser Artikel richtet sich an erfahrene Outlook-Benutzer, die sich über VBA informieren und mehr darüber erfahren möchten, wie sie Outlook 2010 durch entsprechende Programmierung auf ihre individuellen Anforderungen zuschneiden können.

Wir empfehlen, vor der Lektüre dieses Artikels den Einführungsartikel Erste Schritte mit VBA in Office 2010 zu lesen. Dort werden die Grundlagen der Programmierung mit VBA ausführlicher beschrieben.

Die Stärke der VBA-Programmierung in Office 2010 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. Und wenn der Vorgang mit VBA einmal ausgeführt werden kann, lässt er sich auch problemlos Hunderte oder Tausende Male wiederholen. (Tatsächlich ist die Automatisierung von wiederkehrenden Aufgaben eines der Haupteinsatzgebiete von VBA in Office.)

Doch Sie können das Potenzial der Skripterstellung mit VBA nicht nur zum Beschleunigen von alltäglichen Aufgaben nutzen. Mit VBA können Sie auch neue Funktionen zu Office 2010-Anwendungen hinzufügen oder eine auf Ihre individuellen Geschäftsanforderungen abgestimmte Benutzerführung implementieren, d. h. die Benutzer Ihrer Dokumente an ganz bestimmten Stellen zu Eingaben auffordern oder gezielt mit ihnen interagieren. Beispielsweise können Sie VBA in Outlook 2010 verwenden, um Kontakte, E-Mails, Kalenderelemente oder Aufgaben nach Methoden zu sortieren, zu exportieren und zu bearbeiten, die in der standardmäßigen Benutzeroberfläche nicht verfügbar sind.

In dem Lernprogramm in diesem Artikel wird Outlook mithilfe von VBA automatisiert. Es handelt sich um ein Beispiel aus der Praxis, mit dem Sie die Programmierung, VBA und die Entwicklungstools, die Ihnen als erfahrener Outlook-Benutzer zur Verfügung stehen, ausprobieren können.

Auswählen des geeigneten Ansatzes

VBA-Programmierung ist eine leistungsstarke Methode, aber nicht immer der optimale Ansatz. In manchen Fällen ist es sinnvoller, andere Methoden einzusetzen, um das Ziel zu erreichen.

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 Vorgang in Outlook haben, überlegen Sie, ob Sie ihn mithilfe von Regeln vereinfachen können. Können Sie die Aufgabe einmal ausführen und dann mit STRG+Y (Wiederholen) wiederholen?

Outlook 2010 ist eine leistungsstarke Anwendung. Die Lösung, die Sie brauchen, ist vielleicht schon vorhanden. Nehmen Sie sich etwas Zeit, und machen Sie sich eingehender mit den Funktionen von Outlook 2010 vertraut, bevor Sie sich in die Programmierung stürzen.

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.

Verwenden von Code, damit Anwendungen bestimmte Vorgänge ausführen

Vielleicht haben Sie die Vorstellung, dass das Schreiben von Code ein Buch mit sieben Siegeln ist. Doch die Grundprinzipien fußen auf Alltagslogik und erschließen sich dem Lernenden problemlos. Office 2010-Anwendungen wurden wie folgt entwickelt: Sie machen so genannte Objekte verfügbar, die Anweisungen erhalten können, ähnlich wie bei einem Telefon, mit dem Sie über Tasten interagieren. Wenn Sie eine Taste drücken, erkennt das Telefon die Anweisung und schließt die zugehörige Zahl in die Zahlenfolge ein, die Sie wählen. In der Welt des Programmierens interagieren Sie mit der Anwendung, indem Sie Anweisungen an verschiedene Objekte in der Anwendung senden. Diese Objekte sind umfangreich, haben aber ihre Grenzen. Um es salopp auszudrücken: Sie können nur das tun, was sie tun sollen, und sie tun nur das, was Sie ihnen sagen.

Betrachten wir einmal den folgenden Vorgang: Ein Benutzer erstellt in Outlook eine E-Mail, wählt einen Empfänger aus, gibt einen Betreff für die Nachricht ein und klickt dann auf Senden. Auf die VBA-Programmierung übertragen bedeutet dies, Outlook macht ein MailItem-Objekt verfügbar. Mithilfe von VBA-Code legen Sie den Betreff und den Textkörper des MailItem-Objekts fest und weisen Outlook an, das Objekt zu speichern oder zu senden. In diesem Artikel erfahren Sie mehr über diese Objekte und darüber, wie sie organisiert sind, wie sie beschrieben und verändert werden.

Objekte, Methoden und Eigenschaften

Entwickler organisieren Programmierobjekte in einer Hierarchie, die als das Objektmodell der Anwendung bezeichnet wird. Der Posteingang in Outlook ist beispielsweise ein Folder-Objekt, das im Namespace-Objekt von Outlook enthalten ist. Das Folder-Objekt enthält wiederum MailItem-Objekte usw. Objektmodelle spiegeln ungefähr das wider, was Sie auf der Benutzeroberfläche sehen. Sie stellen eine konzeptionelle Abbildung der Anwendung und ihrer Funktionen dar. Programmiertechnisch gesehen kann ein Folder-Objekt beliebige Typen von Elementobjekten enthalten. Typischerweise enthält jeder Ordner auf der Outlook-Benutzeroberfläche aber überwiegend einen bestimmten Typ Elementobjekt. So wird auf der Outlook-Benutzeroberfläche beispielsweise ein Ordner Kontakte angezeigt, der hauptsächlich ContactItem-Objekte enthält, und ein Ordner Kalender, der primär AppointmentItem- und MeetingItem-Objekte enthält.

Die Definition eines Objekts wird als Klasse bezeichnet. Daher werden diese beiden Begriffe manchmal auch als Synonyme verwendet. Technisch gesehen ist eine Klasse die Beschreibung oder Vorlage, mit der ein Objekt erstellt oder instanziiert wird.

Sobald ein Objekt vorhanden ist, können Sie es verändern, indem Sie seine Eigenschaften festlegen und die zugehörigen Methoden aufrufen. Wenn Sie sich das Objekt einmal als Substantiv vorstellen, sind die Eigenschaften die Adjektive, die das Substantiv beschreiben, und die Methoden sind die Verben, die ausdrücken, was das Substantiv "tut". Wenn Sie eine Eigenschaft ändern, ändert sich ein bestimmtes Merkmal des Erscheinungsbilds oder des Verhaltens des Objekts. Durch Aufrufen einer der Methoden des Objekts legen Sie fest, dass das Objekt eine bestimmte Aktion ausführt.

Nachdem Sie sich mit dem grundlegenden Aufbau des Objektmodells in Outlook und den wichtigsten Eigenschaften von Application-, Explorer- und Folder-Objekten vertraut gemacht haben, auf denen der aktuelle Status der Anwendung basiert, können Sie damit beginnen, Outlook mithilfe von VBA zu erweitern und zu verändern.

Sie haben nun eine Vorstellung davon, wie in Outlook 2010-Anwendungen Objektmodelle verfügbar gemacht werden. Wahrscheinlich möchten Sie auch gleich ausprobieren, wie Sie mit dem Aufrufen von Objektmethoden, Festlegen von Objekteigenschaften und Antworten auf Objektereignisse zurechtkommen. 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. Dieser Editor ist zwar standardmäßig installiert, vielen Benutzern aber gänzlich unbekannt, bevor er nicht auf dem Menüband aktiviert ist.

Öffnen der Registerkarte "Entwickler"

In allen Office 2010-Anwendungen wird das Menüband verwendet. 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 die Registerkarte Entwickler in Office 2010 nicht standardmäßig angezeigt wird, müssen Sie sie wie folgt aktivieren:

So aktivieren Sie die Registerkarte Entwickler

  1. Klicken Sie auf der Registerkarte Datei auf Optionen, um das Dialogfeld Outlook-Optionen zu öffnen.

  2. Klicken Sie auf der linken Seite des Dialogfelds auf Menüband anpassen.

  3. Wählen Sie auf der linken Seite des Dialogfelds unter Befehle auswählen den Eintrag Häufig verwendete Befehle aus.

  4. Klicken Sie auf der rechten Seite des Dialogfelds unter Menüband anpassen auf Hauptregisterkarten, und aktivieren Sie dann das Kontrollkästchen Entwickler.

  5. Klicken Sie auf OK.

Hinweis Hinweis

In Office 2007 konnten Sie die Registerkarte Entwickler anzeigen, indem Sie auf die Office-Schaltfläche und dann auf Optionen klickten 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. Registerkarte Entwickler in Outlook 2010

Registerkarte 'Entwicklertools' in Outlook 2010

Überlegungen zur Sicherheit

Zum Schutz vor Viren und anderer Malware sind VBA-Makros in Outlook standardmäßig deaktiviert. Zum Aktivieren von Makros führen Sie die folgenden Schritte aus:

So aktivieren Sie Makros

  1. Klicken Sie auf der Registerkarte Datei auf Outlook-Optionen, um das Dialogfeld Outlook-Optionen zu öffnen, und klicken Sie dann auf Sicherheitscenter.

  2. Klicken Sie auf Einstellungen für das Sicherheitscenter und dann links auf die Option Makroeinstellungen.

  3. Wählen Sie Benachrichtigungen für alle Makros aus, und klicken Sie dann auf OK. Diese Option erlaubt die Ausführung von Makros in Outlook. Dabei werden Sie aber vor der Ausführung eines Makros aufgefordert, zu bestätigen, dass das Makro ausgeführt werden soll.

  4. Starten Sie Outlook neu, damit die Konfigurationsänderung wirksam wird.

Der Visual Basic-Editor

Nachdem Sie die Registerkarte Entwickler aktiviert haben, können Sie den Visual Basic-Editor öffnen, das integrierte Tool zum Schreiben und Bearbeiten von VBA-Code für Outlook. Gehen Sie wie folgt vor, um den Visual Basic-Editor zu öffnen:

So öffnen Sie den Visual Basic- Editor

  1. Klicken Sie auf der Registerkarte Entwickler auf die Schaltfläche Makros.

  2. Geben Sie im nun angezeigten Dialogfeld Makro unter Makroname die Bezeichnung Test ein.

  3. Klicken Sie auf die Schaltfläche Erstellen, um den Visual Basic-Editor mit der bereits eingetragenen Struktur eines neuen Makros zu öffnen.

Der Visual Basic-Editor enthält den folgenden Code.

Sub Test()
End Sub

Sub steht für "Subroutine" (Unterroutine), die Sie vorerst als "Makro" definieren können. Wenn Sie das Test-Makro ausführen, wird der gesamte Code ausgeführt, der zwischen Sub Test() und End Sub steht.

Bearbeiten Sie das Makro jetzt so, dass es etwa wie folgender Code aussieht.

Sub Test()
   MsgBox("Hello world")
End Sub
Abbildung 2. Test-Makro im Visual Basic-Editor

Makro im Visual Basic-Editor testen

Beachten Sie den linken Bereich im Visual Basic-Editor. Das Test-Makro befindet sich in Module1 von Project1. Ein Projektmodul enthält mehrere Module, und jedes Modul enthält wiederum eine Auflistung von VBA-Code, die Sie als BAS-Datei importieren oder exportieren können.

Sobald ein Objekt vorhanden ist, können Sie es verändern, indem Sie seine Eigenschaften festlegen und seine Methoden aufrufen. Die Unterroutine, die Sie bearbeitet haben, enthält eine Methode, also Code, der eine bestimmte Aktion ausführt. Die Test()-Methode in der Unterroutine ist jetzt ein Member des Objekts Project1.

HinweisHinweis

Bei anderen Office-Anwendungen werden im Visual Basic-Editor möglicherweise mehrere Projekte aufgelistet. In Outlook VBA wird nur ein Projekt aufgeführt, und dieses heißt immer Project1.

Gehen Sie zurück zur Registerkarte Entwickler in Outlook, und klicken Sie erneut auf die Schaltfläche Makros. Wählen Sie in der angezeigten Liste das Makro Project1.Test aus, und klicken Sie auf Ausführen, um ein kleines Meldungsfeld mit dem Text "Hello, world!" anzuzeigen.

Herzlichen Glückwunsch! Sie haben gerade benutzerdefinierten VBA-Code in Outlook erstellt und implementiert! Klicken Sie in dem Meldungsfeld auf OK, um die Meldung zu schließen und die Ausführung des Makros zu beenden.

Falls das Meldungsfeld nicht angezeigt wird, überprüfen Sie die Sicherheitseinstellungen für Makros, und starten Sie Outlook neu.

Wenn Sie ein Makro häufig benötigen, ist es vielleicht bequemer, wenn Sie es über eine Tastenkombination oder eine Schaltfläche auf der Symbolleiste für den Schnellzugriff ausführen können.

Gehen Sie wie folgt vor, um eine Schaltfläche für das Makro Test auf der Symbolleiste für den Schnellzugriff zu erstellen:

So erstellen Sie eine Schaltfläche für ein Makro auf der Symbolleiste für den Schnellzugriff

  1. Klicken Sie auf die Registerkarte Datei.

  2. Klicken Sie auf Optionen, um das Dialogfeld Outlook-Optionen zu öffnen, und klicken Sie dann auf Symbolleiste für den Schnellzugriff.

  3. Wählen Sie in der Liste unter Befehle auswählen: den Eintrag Makros aus. Suchen Sie in der nun angezeigten Liste den Text mit einer ähnlichen Bezeichnung wie Project1.Module1.Test heraus, und wählen Sie diesen Text aus.

  4. Klicken Sie auf die Schaltfläche Hinzufügen >>, um das Makro in die Liste auf der rechten Seite zu übertragen. Klicken Sie dann auf die Schaltfläche Ändern…, um ein Schaltflächenbild auszuwählen, das dem Makro zugeordnet werden soll.

  5. Klicken Sie auf OK. Die neue Schaltfläche sollte nun auf der Symbolleiste für den Schnellzugriff oberhalb der Registerkarte Datei angezeigt werden.

Jetzt können Sie das Makro jederzeit rasch ausführen, ohne die Registerkarte Entwickler verwenden zu müssen. Probieren Sie es aus!

Abbildung 3. Zuordnen eines Makros zu einer Schaltfläche auf der Symbolleiste für den Schnellzugriff

Zuweisen eines Makros zur Symbolleiste für den Schnellzugriff

Angenommen, in einer Firma namens Example Systems gibt es zahlreiche Kontakte, und jeder Kontakt hat eine E-Mail-Adresse mit der Domäne @example.com. Nehmen wir weiter an, dass Example Networks die Firma Example Systems übernimmt und die E-Mail-Adressen aller Mitarbeiter auf @example.net ändert. Das ließe sich schnell manuell erledigen, wären bei Example Systems nur zwei oder drei Kontakte vorhanden. Wahrscheinlicher ist, dass 20, 50 oder 100 Kontakte vorhanden sind und damit eine Automatisierung dieser wiederkehrenden Aufgabe sinnvoll ist – ein gängiger Verwendungszweck von VBA in Office.

In diesem Artikel wird beschrieben, wie Sie diese Kontakte mit VBA in Outlook ändern können. Außerdem werden einige grundlegende VBA-Konzepte erklärt.

Zugreifen auf den Ordner "Kontakte"

Gehen Sie wie bei der Erstellung des Test-Makros vor, um ein neues Makro mit dem Namen CompanyChange zu erstellen, und öffnen Sie dieses im Visual Basic-Editor.

Die erste Aufgabe besteht darin, Zugriff auf das Objekt für den Ordner Kontakte in Outlook zu erhalten und dann den Verweis auf dieses Objekt in einer Variablen zu speichern.

Bei der Programmierung ist eine Variable ein temporäres, benanntes Objekt, das einen Wert oder einen Verweis auf ein Objekt annehmen kann. Im folgenden Beispielcode wird eine Variable namens ContactsFolder verwendet. Der Code gibt VBA die Anweisung, dass er ein Folder-Objekt darin platziert und die GetDefaultFolder-Methode des Session-Objekts ausführt, um den Contacts-Ordner zu finden und einen Verweis auf diesen Ordner in dieser Variable zu speichern.

Der Visual Basic-Editor bietet eine nützliche Funktion zur automatischen Codeeingabe namens IntelliSense. Geben Sie genau acht, wenn Sie Session.GetDefaultFolder und dann die runde Klammer links für den Parameter eingeben: Währenddessen wird Ihnen im Visual Basic-Editor eine Liste mit Optionen angezeigt. Wählen Sie mithilfe der NACH-UNTEN-TASTE oder der Maus olFolderContacts,, einen der verfügbaren Ordnertypen aus, und drücken Sie TAB, um ihn auszuwählen.

Abbildung 4. Auswählen eines Ordnertyps mithilfe von IntelliSense

Auswählen eines Ordnertyps mithilfe von IntelliSense

Es hat sich zwar bewährt, beim Schreiben von Code Kopieren und Einfügen zu verwenden, um Tippfehler zu vermeiden, doch sollten Sie den Code jetzt erst einmal im Visual Basic-Editor eingeben, damit Sie selbst sehen, wie der Editor Ihnen hilft.

Sub CompanyChange()
    Dim ContactsFolder as Folder
    Set ContactsFolder = Session.GetDefaultFolder(olFolderContacts)
End Sub

Fügen Sie eine weitere Zeile hinzu, sodass Sie Feedback bekommen und Ihr Makro während der Erstellung testen können. (Nehmen Sie sich außerdem einen Moment Zeit, um für CompanyChange eine Schaltfläche auf der Symbolleiste für den Schnellzugriff zu erstellen, wie im Abschnitt "Makros leicht zugänglich machen" beschrieben.)

Sub CompanyChange()
    Dim ContactsFolder as Folder
    Set ContactsFolder = Session.GetDefaultFolder(olFolderContacts)
    MsgBox ("Contacts Found: " & ContactsFolder.Items.Count)
End Sub

Items ist eine Eigenschaft des Folder-Objekts, und Count ist eine Eigenschaft der Items-Eigenschaft.

Führen Sie das Makro aus. Die Anzahl der in Outlook vorhandenen Kontakte sollte in einem Meldungsfeld angezeigt werden.

Falls noch nicht geschehen, öffnen Sie den Ordner Kontakte, und erstellen Sie einige Beispielkontakte für das fiktive Unternehmen Example Systems. Verwenden Sie für jeden Beispielkontakt den Firmennamen Example Systems, und erstellen Sie für jeden eine eindeutige E-Mail-Adresse nach dem Muster jemand@example.com.

Auflistungen von Objekten

Auflistungen sind eines der leistungsstärksten Elemente von Programmiersprachen wie VBA. Eine Auflistung ist ein Satz von Objekten, der in einer Eigenschaft gespeichert werden und auf einfache Weise durchlaufen werden kann, sodass auf jedes Objekt zugegriffen wird. In diesem Fall muss der Code die Auflistung von Kontakten durchlaufen, um die Mitarbeiter von Example Systems herauszusuchen.

Wie bereits erwähnt, kann über die ContactsFolder-Variable auf die Items-Auflistung des Ordner-Objekts zugegriffen werden. Die Items-Auflistung eines Ordners Kontakte gibt Objekte vom Typ ContactItem zurück. Erstellen Sie eine Variable, die einen Verweis auf jedes ContactItem-Objekt enthält.

Dim Contact As ContactItem

Hinweis: Sie haben auch die Möglichkeit, den Allzwecktyp Object zu verwenden, wenn Sie nicht wissen, welcher Typ von Objekt von einer Auflistung zurückgegeben wird. Ist Ihnen der Objekttyp jedoch bekannt, hat es zahlreiche Vorteile, wenn Sie ihn genauer angeben.

Dim Contact As Object

Nachdem Sie das ContactItem-Objekt erstellt haben, müssen Sie den Namen der Firma für jede Person überprüfen. Da das ContactItem-Objekt Informationen über einen Kontakt speichert, muss es eine Eigenschaft für den Firmennamen geben. Da Sie den Namen dieser Eigenschaft aber nicht kennen, müssen Sie ihn mithilfe eines der folgenden Verfahren herausfinden.

Ermitteln von Eigenschaftennamen

Damit Sie ein Objekt in VBA umfassend nutzen können, müssen Sie seine Eigenschaften und Methoden kennen. Natürlich können zahlreiche Aufgaben mithilfe von Beispielcode ausgeführt werden, den Sie im Internet finden. Wenn Sie die Objekte, die Sie verwenden, jedoch systematisch untersuchen, haben Sie mehr Optionen, weniger Aufwand für das Debuggen und sparen Zeit bei der Codeerstellung.

Beispielsweise können Sie Informationen über das ContactItem-Objekt in der Outlook-Entwicklerreferenz in der Hilfe finden, indem Sie ContactItem im Code markieren und dann F1 drücken. Sie können auch in der Hilfe nach ContactItem suchen. Nutzen Sie auf jeden Fall die Links in den verschiedenen Themen, um Informationen über damit zusammenhängende Objekte zu lesen.

Die Entwicklerreferenz ist ein leistungsfähiges Tool für die VBA-Programmierung und eine Möglichkeit, die für den Code benötigte Eigenschaft herauszufinden. Nachdem Sie die allgemeinen Informationen zum ContactItem-Objekt gelesen haben, klicken Sie auf den Link "Member des 'ContactItem'-Objekts", um die Liste der Methoden und Eigenschaften des Objekts anzuzeigen (Eigenschaften und Methoden werden zusammen als Member bezeichnet).

Wenn Sie die Liste durchsehen, stoßen Sie auf die CompanyName-Eigenschaft. Diese könnte geeignet sein.

Neben der Outlook-Entwicklerreferenz können Sie auch IntelliSense im Visual Basic-Editor nutzen, um eine Eigenschaft oder Methode zu finden. Nachdem Sie die Contact-Variable als ContactItem-Objekt definiert haben, können Sie Contact und einen Punkt eingeben, um die gleiche Memberliste abzurufen, die auch in der Hilfe angezeigt wird. Zum Auswählen einer der von IntelliSense angebotenen Möglichkeiten verwenden Sie die NACH-OBEN- bzw. NACH-UNTEN-TASTE oder die Maus und drücken anschließend TAB.

IntelliSense bietet keine Beschreibung der verschiedenen Member, daher nutzen Sie diese Funktion am besten, wenn der richtige Member sich aus dem Kontext ergibt oder Sie den Namen des Members kennen und lediglich die genaue Schreibweise nicht mehr wissen. Falsch geschriebene Membernamen führen zu Fehlern, auf die Sie im Visual Basic-Editor erst beim Ausführen des Makros hingewiesen werden.

Durchlaufen einer Auflistung

Sie haben nun eine Auflistung, Sie wissen, welchen Typ von Objekten sie enthält, und Sie haben eine Eigenschaft definiert, über die auf die gefundenen Objekte zugegriffen wird. Jetzt können Sie mithilfe einer For Each-Schleife die Auflistung durchlaufen und die darin enthaltenen Objekte verändern.

In Pseudocode geben Sie Folgendes an:

For Each [object variable] in [a collection that contains that type of object]
[do something with] [object variable].Property
Next

In echten Code übertragen lautet dies wie folgt, wobei der Code die Zeile mit der MsgBox-Anweisung betrifft.

For Each Contact In ContactsFolder.Items
   Debug.Print Contact.CompanyName
Next

Bevor Sie das Makro erneut ausführen, öffnen Sie im Visual Basic-Editor das Fenster Direkt. Klicken Sie dazu auf der Menüleiste auf Ansicht und dann auf Direktfenster. Früher konnten Sie mithilfe von MsgBox Feedback zum Skript abrufen. MsgBox ist zwar auch hilfreich, allerdings wird hier immer gewartet, bis Sie auf OK geklickt haben, bevor die nächste Meldung angezeigt wird. Bei Debug.Print wird die Ausgabe dagegen zeilenweise ohne Wartezeit an das Fenster Direkt gesendet. Nach dem Ausführen dieses Skripts sollten Sie im Fenster Direkt eine Liste der Firmennamen sehen. Denken Sie daran, dass dies für Sie als Entwickler nützlich ist, die Benutzer, die dieses Makro mit Ihnen gemeinsam verwenden, die Liste jedoch nicht sehen werden.

Einbinden von Entscheidungen mithilfe der "If"-Anweisung

In der fertig gestellten Lösung soll das Makro nur die Kontaktdaten derjenigen Mitarbeiter ändern, die für Example Systems arbeiten, und die anderen Kontakte unverändert lassen. Solche Bedingungen sind die Feinheiten, bei denen die Stärken der Programmierung wirklich zum Tragen kommen. Hier können Sie VBA mithilfe der If-Anweisung mitteilen, dass der Code nur dann ausgeführt werden soll, wenn die angegebene Bedingung wahr ist. Andernfalls soll mit dem Code fortgefahren werden, der auf die End If-Anweisung folgt.

If [some condition is true] Then
' do things
End If
' continue on whether or not the condition was true

Bei dem Problem, für das Sie eine Lösung erarbeiten, ist die entscheidende Bedingung, ob die CompanyName-Eigenschaft für das aktuelle ContactItem-Objekt auf die Zeichenfolge "Example Systems" festgelegt ist.

Beachten Sie im folgenden Code die doppelten Anführungszeichen. Zeichenfolgenwerte (d. h. Textwerte) stehen im Gegensatz zu numerischen Werten immer in doppelten Anführungszeichen. Einfache Anführungszeichen werden in VBA ignoriert. Diese dienen zum Einfügen von Kommentaren für Sie selbst und andere Entwickler.

Fügen Sie die Bedingung in den Code ein, sodass das vollständige Skript nun etwa wie folgender Code aussieht.

Sub CompanyChange()
    Dim ContactsFolder As Folder
    Set ContactsFolder = Session.GetDefaultFolder(olFolderContacts)
    MsgBox ("Contacts Found:" & ContactsFolder.Items.Count)
    
    Dim Contact As ContactItem

    For Each Contact In ContactsFolder.Items
        If Contact.CompanyName = "Example Systems" Then
            Debug.Print "Found: " & Contact.FullName
        End If
    Next
End Sub

Nachdem Sie den Code ausgeführt haben, sollten im Fenster Direkt die Namen der Kontakte aus der Firma Example Systems angezeigt werden.

Abbildung 6. Ausgabe im Fenster Direkt

Ausgabe im Fenster 'Direkt'

Beachten Sie, wie sowohl bei Debug.Print als auch bei MsgBox (siehe weiter oben) zum Zwecke der Klarheit feste Zeichenfolgen mit dem Ergebnis kombiniert werden, z. B. "Gefunden: " gefolgt von dem von einer Eigenschaft zurückgegebenen Wert. Damit dies funktioniert, müssen Sie die zwei Textzeichenfolgen mithilfe des Operators für Zeichenfolgenverkettung (&) miteinander verbinden.

Wichtiger HinweisWichtig

Wichtig: Gehen Sie mit Bedacht vor, während Sie dieses Lernprogramm weiter durcharbeiten. Sie bearbeiten Ihre tatsächliche Liste mit Outlook-Kontakten, abgesehen von einigen fiktiven Kontakten aus der Beispielfirma Example Systems. Es wäre sicher keine gute Idee, den Firmennamen in jedem Ihrer Kontakte auf "Example Networks" zu ändern.

Ändern des Firmennamens

Sie haben es fast geschafft. Sie haben die Kontakte geladen, die Kontakte können durchlaufen werden, und es kann zwischen Ihren Kontakten und denen von Example Systems unterschieden werden. Damit der Firmenname bei den relevanten Kontakten auf Example Networks umgestellt wird, ändern Sie die CompanyName-Eigenschaft und rufen die Save-Methode auf, um die Änderung festzuschreiben (einen Commit der Änderung auszuführen).

        If Contact.CompanyName = "Example Systems" Then
            Contact.CompanyName = "Example Networks"
            Contact.Save
            Debug.Print "Changed: " & Contact.FullName
        End If

Führen Sie das Makro aus, und betrachten Sie dann die Kontakte für Example Systems. Der Firmenname sollte bei diesen Kontakten nun Example Networks lauten. Zum weiteren Testen des Skripts müssen Sie den Firmennamen auf Example Systems zurücksetzen, entweder manuell oder durch Erstellen eines anderen Makros, das den Firmennamen programmgesteuert zurücksetzt.

Behalten Sie die Debug.Print-Anweisung bei, auch wenn sie für das Funktionieren des Skripts nicht wesentlich ist. Je mehr Feedback Sie und Ihre Benutzer zu einem Makro bekommen, desto besser.

Ändern der E-Mail-Adresse

Das Ändern der CompanyName-Eigenschaft war eine einfache Änderung einer ganzen Zeichenfolge. Zum Ändern der Domäne der E-Mail-Adresse von @example.com auf @example.net wird ein Zeichenfolgenvorgang benötigt. Jede Zeichenfolge hat ein integriertes Nummerierungssystem, bei dem jedem Zeichen eine Indexnummer zugewiesen ist, beginnend mit 1. Sie können eine Vielzahl von VBA-Funktionen nutzen, um Zeichenfolgen ganz oder teilweise zu verändern. Wenn Sie diese Zeichenfolgenvorgänge beherrschen, haben Sie als VBA-Programmierer erheblich mehr Möglichkeiten, da in vielen Programmiersituationen eine Zeichenfolge auf eine Teilzeichenfolge hin untersucht oder ein Teil einer Zeichenfolge geändert werden muss. (Wenn Sie im Internet nach "VBA-Zeichenfolgenfunktionen" suchen, erhalten Sie zahlreiche nützliche Listen und Beispiele.)

Sie können die Replace-Funktion verwenden, um eine einfache Ersetzung einer Teilzeichenfolge durch eine andere auszuführen. Häufiger jedoch ist die Situation so, dass Sie komplexeren Code benötigen, um Zeichenfolgen zu verändern. Fügen Sie die folgende Zeile unmittelbar vor dem Aufruf von Contact.Save ein.

Contact.Email1Address = Replace(Contact.Email1Address, "example.com", "example.net")

Lesen Sie den Code aufmerksam von links nach rechts. Er besagt, dass die Email1Address-Eigenschaft des Kontakts (die erste E-Mail-Adresse) auf einen neuen Wert festgelegt werden soll. Der neue Wert wird bereitgestellt, indem die Replace-Funktion aufgefordert wird, in der aktuellen Contact.Email1Address-Eigenschaft nach der Zeichenfolge "example.com" zu suchen und sie durch "example.net" zu ersetzen.

Stellen Sie sicher, dass der Firmenname in Ihren fiktiven Kontakten auf Example Systems festgelegt ist, und führen Sie dann das Skript aus. Alle E-Mail-Adressen sollten auf @example.net, und alle Firmennamen sollten auf Example Networks geändert worden sein.

Verallgemeinern des Codes

Sie haben nun ein leistungsfähiges Makro. Es ist jedoch in gewisser Hinsicht begrenzt, denn die einzige Möglichkeit, den neuen Firmennamen anzugeben, besteht darin, den Code zu bearbeiten. Damit der Code vielfältiger einsetzbar ist, können Sie eine InputBox-Funktion verwenden, mit der der Benutzer zur Eingabe von Informationen aufgefordert wird.

Der folgende Code stellt das endgültige Skript dar – eine nützliche und vollständige Outlook-Lösung.

Sub CompanyChange()
    Dim ContactsFolder As Folder
    Set ContactsFolder = Session.GetDefaultFolder(olFolderContacts)
    Dim OldCompanyName As String
    Dim NewCompanyName As String
    Dim OldEmailDomain As String
    Dim NewEmailDomain As String
    Dim ContactsChangedCount As Integer
    
    ' Ask user for inputs
    MsgBox ("This script will change all of your contacts from one company to another.")
    OldCompanyName = InputBox("Under what name are the contacts listed in Outlook now?")
    NewCompanyName = InputBox("What is the new company name to set them to?")
    OldEmailDomain = InputBox("What is the e-mail domain name currently listed after the @ sign? e.g. mycompany.com")
    NewEmailDomain = InputBox("What should the e-mail domain be set to? Leave blank and click OK if no change")
    ContactsChangedCount = 0
    
    Dim Contact As ContactItem
 
    ' loop through Contacts and set those who need it
    For Each Contact In ContactsFolder.Items
        If Contact.CompanyName = OldCompanyName Then
            Contact.CompanyName = NewCompanyName
            If NewEmailDomain <> "" Then
                Contact.Email1Address = Replace(Contact.Email1Address, OldEmailDomain, NewEmailDomain)
            End If
            Contact.Save
            ContactsChangedCount = ContactsChangedCount + 1
            Debug.Print "Changed: " & Contact.FullName
        End If
    Next
    ' confirm and clean up
    MsgBox (ContactsChangedCount & " contacts were changed from '" & OldCompanyName & "' to '" & NewCompanyName)
    Set Contact = Nothing
    Set ContactsFolder = Nothing
End Sub

Das Verschieben von Code von dem Computer, auf dem er entwickelt wurde, auf die Computer der Benutzer wird als Bereitstellung bezeichnet. Die Bereitstellung kann ein bedeutender Teil eines Programmierprojekts sein. In diesem Abschnitt wird erklärt, wie Sie Ihr neues Makro auf andere Computer verteilen können.

Zuerst einige Hintergrundinformationen. Outlook Visual Basic für Applikationen-Code wurde als Umgebung zur Entwicklung von persönlichen Makros konzipiert, nicht zum Bereitstellen oder Verteilen. Daher besteht keine Möglichkeit, ein solches Makro innerhalb eines Dokuments zu speichern, wie dies bei anderen Office-Anwendungen wie Excel oder Word möglich ist.

Zum Verschieben von Outlook VBA-Makros von einem Computer auf einen anderen können Sie Codemodule vom ersten Computer exportieren und auf dem zweiten Computer importieren. Außerdem können Sie mithilfe des Visual Basic-Editors den Quellcode des Projekts durch Kopieren und Einfügen in Project1 auf dem zweiten Computer übertragen.

Wenn Sie eine Lösung entwickeln, die an eine Vielzahl von Personen verteilt werden soll, sollten Sie Ihren Visual Basic für Applikationen-Code in ein Outlook-COM-Add-In konvertieren. Die Entwicklung eines COM-Add-Ins erfordert jedoch in der Regel weitaus umfassendere Programmierkenntnisse als das Erstellen eines kurzen Makros. Wenn Ihr Visual Basic für Applikationen-Projekt also relativ einfach ist und nur von einer kleinen Anzahl von Personen genutzt wird, senden Sie diesen Personen den Code mit Anleitungen zum Öffnen des Visual Basic-Editors und zum manuellen Importieren des Codemoduls.

Importieren und Exportieren von Modulen

Exportieren und importieren Sie Ihr neues Makro in Module1. Wählen Sie im Bereich Projekt das Modul Module1 aus, und klicken Sie im Visual Basic-Editor im Menü Datei auf Datei exportieren…. Sie werden im Visual Basic-Editor aufgefordert, die Datei als Basic-Datei (BAS) zu speichern. Speichern Sie die Datei unter dem Namen Contacts.bas. (Falls eine andere Standarddateierweiterung angegeben ist, vergewissern Sie sich, dass Sie Module1 ausgewählt haben, und öffnen Sie das Dialogfeld Datei exportieren erneut.)

Öffnen Sie die Datei Contacts.bas im Editor, um den Code mit der Headerzeile zu sehen, nach der der Visual Basic-Editor das Modul benennt, wenn Sie den Code importieren.

Attribute VB_Name = "Module1"

Module1 wird für lokale Skripts und Experimente verwendet. Ändern Sie deshalb den Namen so, dass er die Makros in dem Modul aussagekräftig beschreibt. Verwenden Sie beispielsweise Contacts als Modulnamen, um sich am Namen der BAS-Datei zu orientieren. Wenn Sie später weitere Makros zur Automatisierung anderer Vorgänge für Ihre Kontakte geschrieben haben, können Sie den Code hier einfügen und eine logische Gruppe von Makros in einem einzigen Modul verwalten.

Attribute VB_Name = "Contacts"

Kehren Sie nun zum Visual Basic-Editor zurück. Klicken Sie auf Datei, dann auf Datei importieren, und wählen Sie die Datei Contacts.bas aus, um sie zu importieren.

Doppelklicken Sie auf das neue Modul Contacts, das in der Liste Module des Bereichs Projekt angezeigt wird, um den Code anzusehen.

Klicken Sie in Outlook auf der Registerkarte Entwickler auf die Schaltfläche Makros. Sie sollten nun einen Eintrag für …Project1.Contacts.CompanyChange sehen.

Damit haben Sie auf einfachstem Wege Makrocode an andere Mitglieder Ihrer Organisation verteilt. Die anderen Benutzer müssen natürlich noch die Datei Contacts.bas importieren und das Modul Contacts im Visual Basic-Editor hinzufügen. Dazu müssen sie in Outlook 2010 die Registerkarte Entwickler aktivieren. Nach dem Importieren der Datei Contacts.bas können die Benutzer Ihr Makro über die Registerkarte Entwickler ausführen. Oder sie öffnen das Dialogfeld Outlook-Optionen und ordnen das Makro einer Schaltfläche auf der Symbolleiste für den Schnellzugriff oder dem Menüband selbst zu. Weitere Informationen zu komplexeren Optionen für die Bereitstellung finden Sie im Abschnitt "Weitere Ressourcen".

In diesem Artikel wurden die vielfältigen Möglichkeiten von Visual Basic für Applikationen (VBA) in Microsoft Outlook beschrieben. Mit VBA können Sie wiederkehrende Aufgaben automatisieren und Outlook 2010 erweitern. Anhand eines praxisbezogenen Beispiels für die VBA-Programmierung wurde erklärt, wie Sie die Registerkarte Entwickler öffnen und wie Sie Makros erstellen, ausführen, bearbeiten und debuggen. Darüber hinaus wurden in diesem Thema VBA-Variablen, das Objektmodell und Funktionen wie If und For Each behandelt.

Anzeigen: