Outlook und Access – Import und Export von Access-Daten

Autor: André Minhorst, Duisburg

Office-Anwender verfügen automatisch über eine Version von Outlook, einer Anwendung zur Verwaltung von Adressen, Terminen, Projekten und elektronischer Korrespondenz. Moment – heißt es da Verwaltung von Adressen Dient nicht auch jede zweite Datenbank zur Verwaltung von Adressen oder Kontakten Das wäre ja doppelt gemoppelt! Wenn Sie also Kontakte in Outlook und einer Access-Datenbank verwalten, ist der vorliegende Beitrag genau das Richtige für Sie: Sie erfahren nämlich, wie Sie Daten zwischen Outlook und Access hin- und herbewegen können.

Es gibt unterschiedliche Arten, Daten von Access zu Outlook und zurück zu bewegen. Die einfachste Art ist sicher der Import von Outlook-Daten in eine Access-Tabelle.

Import mit dem Assistenten

Dabei müssen Sie allerdings jedes Mal mit dem Assistenten arbeiten. Sie lernen diese Methode im folgenden Kapitel kennen. Wenn Sie die Daten Ihrer Datenbank oft mit denen von Outlook synchronisieren, ist das allerdings eine eher umständliche Variante.

Import per VBA

In dem Fall sollten Sie eine VBA-Routine entwerfen, die automatisch die gewünschten Daten in die entsprechende Tabelle einliest. Wie das funktioniert, erfahren Sie in Kapitel 3.

Export per VBA

Es geht aber auch andersherum: Natürlich können Sie auch Daten aus einer Access-Datenbank in die Kontakte von Outlook übernehmen. Auch hier ist die Verwendung einer VBA-Prozedur die beste Möglichkeit. Alles hierüber erfahren Sie in Kapitel 4.

Wenn Sie Kontaktdaten von Outlook in ihre eigene Datenbank übernehmen möchten, gibt es zwei Möglichkeiten: Entweder es existiert bereits eine Tabelle, in die Sie die entsprechenden Daten importieren möchten, oder der Assistent soll eine neue Tabelle erstellen.

In beiden Fällen wählen Sie zunächst den folgenden Menübefehl: Datei( Externe Daten( Importieren. Es öffnet sich ein Dialog zur Auswahl der Datei, aus der Sie die Daten importieren möchten. Wählen Sie im Kombinationsfeld Dateityp den Eintrag Outlook. Daraufhin verschwindet der erste Dialog und es erscheint der weiterer Dialog namens Exchange/Outlook-Import-Assistent (siehe Bild 1).

Bild 1: Der Import-Assistent von Outlook

öffnen Sie hier den Ordner Adressbücher und wählen Sie den Eintrag Kontakte aus. Klicken Sie dann auf die Schaltfläche Weiter.

Neue oder bestehende Tabelle

Hier entscheiden Sie nun, ob der Assistent eine neue Tabelle angelegen oder eine vorhandene Tabelle verwenden soll. Wenn Sie die Option Bestehende Tabelle wählen, müssen Sie auch den Namen der gewünschten Tabelle angeben.

Import in eine neue Tabelle

Am einfachsten ist es, einfach eine neue Tabelle anzulegen. Wählen Sie daher die Option In einer neuen Tabelle aus. Klicken Sie anschließend auf die Schaltfläche Weiter (siehe Bild 2).

Bild 2: Auswahl einer Tabelle zum Speichern der Daten

Anschließend können Sie die einzelnen Felder der neuen Tabelle gemäß Ihren Wünschen anpassen. Dazu klicken Sie in der unteren, datenblattähnlichen Ansicht auf das gewünschte Feld und geben anschließend den Feldnamen und den Datentyp an. Außerdem legen Sie fest, ob der Assistent für das Feld einen Index festlegen soll. Durch Markieren des Kontrollkästchens Feld nicht importieren (überspringen) können Sie den Import des Feldes verhindern (siehe Bild 3).

Bild 3: Anpassen der zu importierenden Daten

Im folgenden Schritt legen Sie noch fest, ob Sie einen Primärindex festlegen und welchen Sie verwenden möchten (siehe Bild 4).

Bild 4: Hinzufügen eines Primärschlüssels

Schließlich fragt der Assistent Sie nach dem Namen, unter dem er die Tabelle anlegen soll. Mit einem Mausklick auf die Schaltfläche Fertigstellen beenden Sie die Arbeit des Assistenten.

Import in eine bestehende Tabelle

Wenn Sie die Daten in eine bestehende Tabelle importieren möchten, wählen Sie im ersten Dialog des Assistenten die Option In einer bestehenden Tabelle. Sie können die Daten aber lediglich in eine solche Tabelle einfügen, die Felder für alle entsprechenden Daten von Outlook enthält. Anderenfalls erhalten Sie eine Fehlermeldung und der Assistent bricht den Vorgang ab.

Wenn Sie die Outlook-Daten per VBA importieren möchten, können Sie Vorgang erheblich beschleunigen und anpassen. Sie können dann auch Daten in bereits vorhandene Tabellen importieren, deren Feldnamen nicht mit den Feldnamen der Outlook-Daten übereinstimmen.

Schneller geht es vor allem dann, wenn Sie genau wissen, welche Felder Sie von Outlook in die Access-Tabelle kopieren möchten.

Sie können den Import – im Vergleich zum Assistenten – weiter anpassen, indem Sie sich eine Art eigenen Assistenten erstellen. Sie können dann beispielsweise nur bestimmte Datensätze importieren – z.B. nur die Daten von Kontakten mit einer E-Mail-Adresse.

Einbinden der Outlook-Objektbibliothek

Bevor Sie per VBA auf Outlook zugreifen können, müssen Sie die Bibliothek mit den entsprechenden Befehlen per Verweis einbinden. Dazu öffnen Sie ein beliebiges Modul und klicken auf den Menübefehl Extras( Verweise. Hier suchen Sie den Eintrag Microsoft Outlook 9.0 Object Library und aktivieren ihn (siehe Bild 5).

Bild 5: Setzen eines Verweises auf die Outlook-Objektbibliothek

Zugriff auf unterschiedliche Outlook-Objekte

Nach den Vorbereitungen können Sie nun direkt mit der Programmierung des ersten Beispiels beginnen.

Da einige Variablen in vielen Beispielprozeduren Verwendung finden, deklarieren Sie sie am Besten im öffentlichen Deklarationsteil eines Moduls.

Das erste Beispiel soll alle Ordner von Outlook sowie deren Unterordner ermitteln.

Dazu definieren Sie zunächst drei Objekte, nämlich ein Application-, ein NameSpace- und ein Folders-Objekt. Das Application-Objekt dient für den Zugriff auf die gesamte Outlook-Anwendung. über dieses Objekt können Sie auch auf alle weiteren, untergeordneten Objekte zugreifen. Eine Ebene unter dem Application-Objekt finden Sie das NameSpace-Objekt. Das NameSpace-Objekt von Outlook heißt MAPI. Es enthält alle Outlookdaten, die in den Nachrichtenspeichern eines Anwenders gespeichert werden. Dazu gehören neben den Nachrichten selbst auch noch andere Objekte wie die Kontakte, Aufgaben, der Kalender usw. Das Objekt Folders wiederum ist dem NameSpace-Objekt untergeordnet. Hierüber greifen Sie auf den Ordner Persönliche Ordner und seine Unterordner zu.

Setzen von Verweisen auf Outlook-Objekte

Um auf Objekte von Outlook – beispielsweise Ordner oder Kontakte – zugreifen zu können, müssen Sie die entsprechenden Objekte referenzieren.

Sie beginnen mit der Deklaration der Objekte:

Dim olAnwendung as Outlook.Application
Dim olNamespace as Outlook.Namespace
Dim olKontaktordner as Outlook.MAPIFolder

Anschließend setzen Sie die nötigen Verweise, beispielsweise auf die Outlook-Anwendung:

Set olAnwendung = Outlook.Application
Set olNamespace = olAnwendung.GetNamespace("MAPI")
Set olKontaktordner = olNamespace.GetDefaultFolder(olFolderContacts)

Wie Sie sehen, bauen die einzelnen Objekte aufeinander auf. So ist es auch bei den weiteren Objekten, die Sie in den meisten Beispielprozeduren verwenden.

Wenn Sie beispielsweise einen Kontakt aus dem Ordner „Kontakte“, dem Standardordner für Kontakte ermitteln wollen, deklarieren Sie zunächst die Gruppe aller Kontakte des Ordners als

Dim olKontakte as olKontaktordner.Items

und den einzelnen Kontakt als

Dim olKontakt as olKontaktordner.ContactItem.

Anschließend setzen Sie die entsprechenden Verweise:

Set olKontakte = olKontaktordner.Items

und ermitteln aus der Objektgruppe folgendermaßen einen einzelnen Kontakt:

St olKontakt = olKontakte.GetFirst

Im vorliegenden Fall setzen Sie den Objektzeiger beispielsweise auf den ersten Kontakt der Gruppe.

Außerdem stehen Ihnen die folgenden Methoden zum Auffinden eines Kontaktes aus einer Kontaktgruppe zur Verfügung:

Find, FindNext, GetNext, GetLast, GetPrevious.

Praxis-Tipp

Falls Sie große Adressenmengen in Outlook verwalten, bietet es sich an, geeignete Unterordner zu erstellen. Das können Sie ganz einfach tun, indem Sie mit der rechten Maustaste auf den vorhandenen Kontakte-Ordner klicken und den Befehl Neuer Ordner aus dem Kontextmenü auswählen. In Bild 6 finden Sie einen Kontakte-Ordner mit zwei neuen Unterordnern.

Bild 6: Kontaktordner mit Unterordnern

Einträge des Kontakte-Ordners lesen

Nun wird es interessant: Mit der folgenden Prozedur lesen Sie die Vor- und Nachnamen aller Einträge der vorhandenen Kontakte-Ordner aus Outlook ein und zeigen diese im Testfenster an.

Dabei ist zu beachten, dass die Prozedur auch alle direkten Unterordner berücksichtigt.

Sub AdressenAnzeigen()    
    Dim olAnwendung As Outlook.Application
    Dim olNamespace As Outlook.NameSpace
    Dim olKontaktordner As Outlook.MAPIFolder
    Dim olKontakte As Outlook.Items
    Dim olKontakt As Outlook.ContactItem    
    Dim Unterordner As Outlook.Folders
    Dim AnzahlUnterordner As Integer
    Dim i As Integer
    On Error GoTo Adressenanzeigen_err    
    Set olAnwendung = New Outlook.Application
    Set olNamespace = olAnwendung.GetNamespace("MAPI")
    Set olKontaktordner = olNamespace.GetDefaultFolder(olFolderContacts)
    Set olKontakte = olKontaktordner.Items
    Debug.Print olKontaktordner.Name
    For Each olKontakt In olKontakte
        Debug.Print "  " & olKontakt.FirstName & " " & olKontakt.LastName
    Next
    Set Unterordner = olKontaktordner.Folders
    AnzahlUnterordner = Unterordner.Count
    For i = 1 To AnzahlUnterordner
        Set olKontakte = Unterordner.Item(i).Items
        Debug.Print Unterordner.Item(i).Name
        For Each olKontakt In Unterordner.Item(i).Items
            Debug.Print "  " & olKontakt.FirstName & " " & olKontakt.LastName
        Next
    Next    
    Exit Sub
Adressenanzeigen_err:
    If Err.Number = 13 Then Resume Next
End Sub

Nach dem Deklarationsteil erstellt die Prozedur zunächst die benötigten Objekte. Neben dem Objekt Kontaktordner als Standardordner legt die Prozedur hier auch das Objekt Unterordner des Typs Folders fest.

Anschließend wertet die Prozedur zunächst die Kontakteinträge aus, die sie im Objekt Kontaktordner finden kann. Dann untersucht sie den Kontaktordner nach Unterordnern. Falls Unterordner vorhanden sind, ermittelt die Prozedur deren Namen und gibt die vorhandenen Einträge aus.

Kontakte von Outlook in eine Access-Tabelle übernehmen

Nachdem Sie sich nun ausgiebig mit dem Objektmodell von Outlook auseinandergesetzt haben, sollen Sie endlich die Möglichkeit bekommen, einige Kontaktdatensätze aus Outlook in ihre eigene Datenbank einzufügen.

Erstellen einer Tabelle für Kontakte

Wenn Sie noch keine Tabelle für Ihre Kontakte erstellt haben, können Sie das schnell tun. Tab. 1 enthält die Felder, die auch das erste Registerblatt eines Kontaktes in Outlook anzeigt (siehe Bild 7).

Bild 7: Adressinformationen in Outlook

Erstellen Sie für das Beispiel eine Tabelle, die alle in Tab. 1 aufgelistete Informationen enthält. Erstellen Sie zusätzlich als erstes Feld ein Primärindexfeld mit der Bezeichnung KontaktNr. Beachten Sie, dass nicht für alle Eigenschaften des Kontaktes ein Wert vorhanden sein muss. Setzen Sie daher die Eigenschaft Leere Zeichenfolge für alle Felder der Tabelle außer dem Primärindex auf den Wert Ja. Anschließend speichern Sie die Tabelle unter dem Namen tblKontakte.

Doppelte Einträge verhindern

Möglicherweise befindet sich in Ihren Outlookdaten der eine oder andere doppelte Eintrag. Vielleicht entwickelt sich Ihre Outlook-Adressenliste auch unabhängig von Ihrer Access-Adressenliste weiter und Sie möchten die beiden Listen von Zeit zu Zeit synchronisieren. Damit Sie keinen Eintrag doppelt anlegen, sollten Sie festlegen, wann ein neuer Listeneintrag nicht erfolgen soll. Sinnvoll ist beispielsweise, keine zwei Einträge mit identischem Vor- und Nachnamen zuzulassen. Sie können das ganz einfach verhindern: Legen Sie einfach einen zusammengesetzten eindeutigen Schlüssel fest, der die beiden Felder Vorname und Nachname enthält.

Gehen Sie dabei folgendermaßen vor:

  • öffnen Sie die Tabelle tblKontakte in der Entwurfsansicht.
  • öffnen Sie mit dem Menübefehl Ansicht( Indizes den Dialog Indizes.
  • Fügen Sie einen neuen Schlüssel gemäß Bild 8 hinzu.
  • Setzen Sie anschließend die Eigenschaften Eindeutig und Nullwerte Ignorieren auf den Wert Ja.
  • Bild 8: Ein neuer eindeutiger Schlüssel

    Wenn Sie per VBA auf die einzelnen Eigenschaften eines Kontaktes zugreifen möchten, müssen Sie dazu die englische Bezeichnung des Kontaktes verwenden. Die folgende Tabelle enthält die wichtigsten Eigenschaften und deren englische übersetzung. Wenn Sie nicht die geschäftliche Adresse, sondern beispielsweise die Privatadresse eines Kontaktes ermitteln möchten, ersetzen Sie bei den englischen Bezeichnungen einfach Business durch Home.

    Tabelle zum Speichern doppelter Datensätze anlegen

    Neben der Tabelle zum Speichern der Kontaktdaten benötigen Sie eine weitere Tabelle zum Speichern der doppelt vorhandenen Datensätze. Die Tabelle soll drei Felder enthalten: Ein Feld namens DatensatzNr, der als Primärindex dient, sowie die Felder Vorname und Nachname. Speichern Sie die Tabelle unter dem Namen tblDoppelteKontakte. Sie benötigen die Tabelle sowohl zum Speichern der doppelten Datensätze beim Importieren als auch beim Exportieren von Daten.

    Deutsche Bezeichnung

    Englische Bezeichnung

    Vorname

    Firstname

    Nachname

    Lastname

    Position

    Jobtitle

    Firma

    CompanyName

    Telefon geschäftlich

    BusinessTelephoneNumber

    Telefon privat

    HomeTelephoneNumber

    Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

    den kompletten Artikel im PDF-Format mit Beispieldatenbank

    diesen und alle anderen Artikel mit dem Jahresabo

    Schreibe einen Kommentar