Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 6/2003.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Adressverwaltung mit Outlook-Schnittstelle, Teil 2

André Minhorst, Duisburg

In Ausgabe 4/2003 von Access im Unternehmen haben Sie die Adressverwaltung mit Outlook-Schnittstelle kennen gelernt. Im vorliegenden Beitrag erfahren Sie, wie Sie der Adressverwaltung neben dem Import von Outlook-Adressen einen entsprechenden Export hinzufügen, wie die einzelnen Elemente der Menüleiste genau funktionieren und wie die Berichte zur Ausgabe von Adressenlisten und Stammblättern zu den einzelnen Einträgen der Adressdatenbank aussehen.

Hinweis

Auf der beiliegenden Heft-CD finden Sie die Beispieldatenbanken zu der vorliegenden Musterlösung unter den Dateinamen Adress97.mdb (Access 97) und Adress00.mdb (Access 2000 und Access XP). (

Export von Adressen nach
Outlook

Nachdem Sie im ersten Teil dieser Beitragsreihe erfahren haben, wie der Import von Outlook-Kontakten in eine Access-Datenbank funktioniert, lernen Sie nun den umgekehrten Weg kennen.

Hinweis

Die nachfolgend beschriebenen und auch in den Musterlösungen enthaltenen Prozeduren und Funktionen ändern durch den Export von Adressdaten nach Outlook gegebenenfalls bereits vorhandene Daten. Sichern Sie deshalb unbedingt die Datei Outlook.pst, bevor Sie die Beispieldatenbanken ausprobieren. Um sicherzugehen, testen Sie die Funktionalität nicht auf Produktivsystemen. (

Beschreibung des Exports

Die Aufgabe beim Import bestand im Wesentlichen darin, eventuell vorhandene Unternehmensdaten herauszufiltern, in die relational verknüpfte Tabelle tblUnternehmen zu schreiben und im Feld UnternehmenID der Tabelle tblAdressen einen entsprechenden Wert für die Verknüpfung zum Unternehmensdatensatz anzulegen.

Beim Transport der Adressdaten in die andere Richtung gibt es zwei Besonderheiten: Erstens werden die mühselig aufgesplitteten Unternehmensdaten wieder direkt in die einzelnen Kontaktdatensätze geschrieben.

Die zweite Besonderheit ist, dass es in Outlook durchaus mehrere Ordner zur Speicherung von Kontakten geben kann. Dementsprechend ist vorher festzulegen, in welchem Ordner die zu exportierenden Kontakte gespeichert werden sollen.

Ein ähnliches Problem wie beim Import in die Datenbank ergibt sich auch beim Export, nämlich die Überprüfung eventuell vorhandener Daten.

Da Outlook mit der EntryID einen eindeutigen Schlüssel für jegliche Objekte enthält, wird dieser beim Import in die Datenbank in der Tabelle tblAdressen gespeichert.

Beim Exportieren von Daten aus der Datenbank nach Outlook sollen zwei Überprüfungen vorgenommen werden: Erstens nach der EntryID und zweitens nach der Kombination aus Vor- und Nachname des Kontakts. Wie auch beim Import sollen für den Fall des Vorhandenseins des Kontaktes drei Möglichkeiten vorgesehen werden:

Abb. 1: Formular für den Export von Adressdaten nach Outlook

  • Überschreiben des vorhandenen Datensatzes
  • Verwerfen des Exports für den aktuellen Datensatz
  • Synchronisation beziehungsweise Vergleich der beiden Datensätze
  • Eine weitere offene Frage ist, ob nur der Zielordner von Outlook nach Duplikaten durchsucht werden soll oder alle Ordner. Der letztere Fall zieht die Frage nach sich, ob bei einem Duplikat eines Kontaktes in einem anderen Ordner als dem Zielordner dieser gelöscht und der neue Kontakt im Zielordner angelegt werden oder ob der neue Kontakt den bestehenden Kontakt im ursprünglichen Ordner ersetzen soll.

    Da vermutlich der Großteil der Outlookanwender ohnehin nur einen Kontaktordner verwendet, soll diesen Fragen im vorliegenden Fall aus dem Weg gegangen werden, indem nur der Zielordner untersucht wird.

    Formular zur Steuerung des Exports

    Das Formular aus Abb. 1 enthält die notwendigen Steuerelemente, um die Einstellungen für den Export vorzunehmen und den Export einzuleiten.

    Im oberen Bereich kann der Benutzer den Ordner festlegen, in dem die zu exportierenden Kontakte gespeichert werden sollen. Der zweite Bereich dient der Auswahl der zu exportierenden Adressen. Das Listenfeld ist für eine Mehrfachauswahl ausgelegt.

    Im dritten Bereich finden Sie die bereits vom Import bekannten drei Möglichkeiten, wie die Anwendung im Falle bereits vorhandener Kontakte reagieren soll. Mit einem Mausklick auf die Schaltfläche Exportieren wird der Export gestartet. Sofern dies nicht zu schnell geht, können Sie das Voranschreiten des Exports auf dem Fortschrittsbalken ablesen.

    Funktion des
    Formulars

    Die Auswahl des Zielordners sowie der zu exportierenden Kontakte beinhaltet keine Besonderheiten und soll daher an diese Stelle nicht weiter beschrieben werden.

    Private Function AdressenExportieren()

        Dim appOutlook As Object

        Dim olNamespace As Object

        Dim olOrdner As Object

        Dim Eintrag As Variant

        Dim ExportEntryID As String

        Dim i As Integer

        Dim AdressID As Integer

        Dim Breitenintervall As Single

        On Error GoTo AdressenExportieren_Err

        If Me.lstAdressen.ItemsSelected.Count = 0 Then

            MsgBox "Sie haben keine Kontakte ausgewählt.", vbOKOnly + vbExclamation, _

            "Fehlende Eingabe"

            Exit Function

        End If

        Set appOutlook = GetObject(, "Outlook.Application")

        On Error GoTo 0

        Set olNamespace = appOutlook.GetNamespace("MAPI")

        Set olOrdner = olNamespace.GetFolderFromID(Me.txtEntryID)

        i = 0

        Breitenintervall = Me!recLaenge.Width / Me!lstAdressen.ItemsSelected.Count

        For Each Eintrag In Me!lstAdressen.ItemsSelected

            AdressID = Me!lstAdressen.Column(6)

            i = i + 1

            Me!recFortschrittsbalken.Width = i * Breitenintervall

            If Me!lstAdressen.ItemData(Eintrag) = "" Then

                ExportEntryID = KontaktVorhandenName(Me!lstAdressen.Column(1), _

                    Me!lstAdressen.Column(2), olOrdner)

                If Not ExportEntryID = "" Then

                    If Me!ogrExport = 1 Then

                        AdresseExportieren AdressID, olOrdner, ExportEntryID, olNamespace

                    Else

                        If Me.ogrExport = 3 Then

                            If Synchronisieren(AdressID, ExportEntryID) = True Then

                                AdresseExportieren AdressID, olOrdner, ExportEntryID, _

                                    olNamespace

                            End If

                        End If

                    End If

                Else

                    AdresseExportieren AdressID, olOrdner

                End If

            Else

                ExportEntryID = KontaktVorhandenEntryID(Me!lstAdressen.Column(0), _

                    olNamespace, olOrdner)

                If ExportEntryID = "" Then

                    ExportEntryID = KontaktVorhandenName(Me!lstAdressen.Column(1), _

                        Me!lstAdressen.Column(2), olOrdner)

    Quellcode 1 (Teil 1)

    Auch die Anzeige des Fortschrittbalkens ist bereits aus dem ersten Teil dieser Beitragsreihe bekannt.

    Interessant ist die Funktion, die durch das Betätigen der Schaltfläche Exportieren aufgerufen wird (s. Quellcode 1).

    Die Funktion deklariert zunächst die benötigten Variablen und überprüft anschließend, ob der Anwender überhaupt mindestens einen Eintrag aus dem Listenfeld markiert hat. Falls nicht, gibt die Prozedur eine entsprechende Fehlermeldung aus.

                End If

                If Not ExportEntryID = "" Then

                    If Me!ogrExport = 1 Then

                        AdresseExportieren AdressID, olOrdner

                    Else

                        If Me.ogrExport = 3 Then

                            If Synchronisieren(AdressID, ExportEntryID) = True Then

                                AdresseExportieren AdressID, olOrdner

                            End If

                        End If

                    End If

                Else

                    AdresseExportieren AdressID, olOrdner

                End If

            End If

        Next Eintrag

        Me!cmdBeenden.Enabled = True

        Exit Function

    AdressenExportieren_Err:

        If Err.Number = 429 Then

            Set appOutlook = CreateObject("Outlook.Application")

            Resume Next

        End If

    End Function

    Quellcode 1 (Fortsetzung)

    Anderenfalls versucht die Funktion zunächst, auf eine bestehende Instanz von Outlook zu verweisen. Ist keine vorhanden, wird über die eigens für diesen Fall angelegte Fehlerbehandlung eine neue Instanz erzeugt.

    Die Variablen olNamespace und olFolder erhalten Verweise auf den Namespace MAPI beziehungsweise den im Formular ausgewählten Kontaktordner.

    Mit einer For Each-Schleife durchläuft die Funktion alle im Listenfeld markierten Einträge. Innerhalb der Schleife gibt es zwei Möglichkeiten: Entweder der Kontakteintrag hat bereits eine EntryID oder nicht. Falls nicht, durchsucht die Funktion den gewählten Kontaktordner in der Funktion KontaktVorhandenName nach einem Kontakt mit dem im Listenfeld angezeigten Vor- und Nachnamen.

    Ist eine EntryID für den Kontakt vorhanden, sucht die Funktion mit Hilfe der Funktion KontaktVorhandenEntryID nach dieser. Sollte dieser Kontakt nicht zuvor aus dieser Outlook.pst-Datei importiert worden sein, und die Funktion KontaktVorhandenEntryID findet keinen entsprechenden Kontakt, wird vorsichtshalber noch die Funktion KontaktVorhandenName verwendet, um nach eventuell vorhandenen Kontakten mit gleichem Vor- und Nachnamen zu suchen.

    Private Function KontaktVorhandenName(Nachname As String, Vorname As String, _

        olOrdner As Object) As String

        Dim olElement As Object

        Set olElement = olOrdner.Items.Find("[FirstName] = '" & Vorname _

            & "' AND [LastName] = '" & Nachname & "'")

        If Not olElement Is Nothing Then

            KontaktVorhandenName = olElement.EntryID

        End If

    End Function

    Quellcode 2

    Private Function KontaktVorhandenEntryID(EntryID As String, olNamespace As Object, _

        olOrdner As Object) As String

        Dim olElement As Object

        Set olElement = olNamespace.GetItemFromID(EntryID)

        If olElement.Parent = olOrdner Then

            If Not olElement Is Nothing Then

                KontaktVorhandenEntryID = olElement.EntryID

            End If

        Else

            KontaktVorhandenEntryID = ""

        End If

    End Function

    Quellcode 3

    Der weitere Verlauf ist in beiden Teilen des If Then-Konstrukts gleich: Die Prozedur wertet die eingegebene Option bezüglich der Vorgehensweise bei vorhandenem Kontakt aus und verwendet die Funktion AdressenExportieren mit unterschiedlichen Parametern, um den Kontakt nach Outlook zu exportieren.

    Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

    Sind Sie Abonnent?Jetzt einloggen ...
     

    Kompletten Artikel lesen?

    Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

    E-Mail:

    Verwandte Beiträge:

    Outlook und Access - Import und Export von Access-Daten

    Outlook: Mails

    © 2003-2015 André Minhorst Alle Rechte vorbehalten.