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 4/2012.

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

Zusammenfassung

Erfahren Sie, wie Sie Outlook-Elemente samt Kategorien synchronisieren können.

Techniken

Outlook, VBA

Voraussetzungen

Access 2000 und höher, teilweise Access 2007 und höher

Beispieldateien

Outlookkategorien.mdb, Outlookkategorien2003.mdb

Shortlink

www.access-im-unternehmen.de/849

Outlook-Objekte mit Kategorien einlesen

André Minhorst, Duisburg

Outlook bietet die Möglichkeit, Objekte wie Termine, E-Mails oder Kontakte mit Kategorien zu versehen. Wenn Sie solche Objekte in eine Access-Datenbank einlesen möchten, möchten Sie möglicherweise auch auf diese Kategorien zugreifen, um die Objekte in der Datenbank entsprechend verarbeiten zu können. Dieser Beitrag zeigt, wie Sie die in Ihrer Access-Datenbank gepflegten Kategorien unter Outlook bereitstellen, wie Sie in Outlook mit Kategorien arbeiten und wie Sie diese beim Import von Outlook-Objekten gleich mit einlesen.

Ein Teil dieses Beitrags bezieht sich auf Objekte, die erst mit Outlook 2007 eingeführt wurden. Dabei handelt es sich um die Auflistung Categories und das Objekt Category. Damit werden in Outlook die Kategorien verwaltet, die Sie sowohl über die Benutzeroberfläche als auch per VBA anlegen können. Damit wird die Verwendung von Kategorien um einiges einfacher gegenüber älteren Outlook-Versionen, wo diese Informationen in der Registry gespeichert wurden (sollte dies für Sie interessant sein: HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Categories). Für diesen Beitrag bedeutet dies, dass Besitzer älterer Outlook-Versionen die Kategorien in Outlook manuell anlegen müssen, während Sie unter Outlook 2007 und 2010 die gegebenenfalls in einer Access-Datenbank vorliegenden Kategorien direkt nach Outlook übertragen können. Die übrigen Techniken, insbesondere das Einlesen von Outlook-Objekten und ihrer Kategorien, sind für die neueren Outlook-Versionen identisch (getestet ab Outlook 2003). Daher starten wir auch mit der Beschreibung dieser Techniken.

Kategorien-Vielfalt

Die erste wichtige Information ist, dass Sie für jedes Outlook-Objekt eine oder mehrere Kategorien speichern können, und zwar in Form einer Semikola-separierten Liste (s. Abb. 1). Dementsprechend sollten Sie in der Zielanwendung eine Datenstruktur bereithalten, die solche Daten verwalten kann - in diesem Fall eine m:n-Beziehung zwischen der Zieltabelle, also tblMails, tblKontakte oder tblTermine und der Tabelle zum Speichern der Kategorien. Diese nennen wir in der Beispieldatenbank tblOutlookkategorien. Die Tabelle zum Herstellen der Beziehung etwa zwischen der Tabelle tblTermine und der Tabelle tblOutlookkategorien heißt tblTermineOutlookkategorien. Das Datenmodell der Beispieldatenbank sieht wie in Abb. 2 aus.

pic001.png

Abb. 1: Kategorien eines Outlook-Termins unter Outlook 2003

pic002.png

Abb. 2: Datenmodell zum Speichern von Terminen und Outlook-Kategorien

Für das Feld Outlookkategorien der Tabelle tblOutlookkategorien legen Sie einen eindeutigen Index fest, damit jede Kategorie nur einmal angelegt wird. Die Tabelle tblTermineOutlookkategorien erhält einen zusammengesetzten, eindeutigen Index für die beiden Fremdschlüsselfelder TerminID und OutlookkategorieID, damit jeder Termin nur einmal einer Outlook-Kategorie zugeordnet werden kann.

Kategorien von Outlook einlesen

Zu Beginn möchten Sie vielleicht zunächst einmal alle bestehenden Outlook-Kategorien in die Tabelle tblKategorien einlesen. Dies erledigt die Prozedur aus Listing 1, allerdings nur für Access 2007 und jünger - ältere Outlook-Versionen bieten schlicht und einfach keine Categories-Auflistung, aus der sich diese Daten einfach auslesen lassen. Stattdessen liegen die Informationen dort in der Registry.

Listing 1: Einlesen der Outlook-Kategorien in eine Access-Tabelle

Public Function KategorienEinlesen() As String

    Dim db As DAO.Database

    Dim objOutlook As Outlook.Application

    Dim objCategory As Outlook.Category

    Dim objCategories As Outlook.Categories

    Dim strKategorien As String

    Set db = CurrentDb

    Set objOutlook = CreateObject("Outlook.Application")

    Set objCategories = objOutlook.GetNamespace("MAPI").Categories

    For Each objCategory In objCategories

        On Error Resume Next

        db.Execute "INSERT INTO tblOutlookkategorien(Outlookkategorie) VALUES('" _

            & Replace(objCategory.Name, "'", "''") & "')", dbFailOnError

        On Error GoTo 0

        strKategorien = strKategorien & objCategory.Name & ";"

    Next objCategory

    KategorienEinlesen = strKategorien

End Function

Die Prozedur erstellt ein Outlook-Objekt beziehungsweise referenziert eine bereits geöffnete Instanz und speichert den Verweis in der Variablen objOutlook. Den Zugriff auf die einzelnen Kategorien liefert eine Auflistung namens Categories, die Sie als Element des MAPI-Namespaces referenzieren. Die darin enthaltenen Elemente heißen Category und werden in der folgenden For Each-Schleife durchlaufen. Innerhalb der Schleife trägt die Prozedur alle Kategorien in das Feld Outlookkategorie Tabelle tblOutlookkategorien ein. Da für dieses Feld ein eindeutiger Index festgelegt ist, löst das Anlegen eines bereits vorhandenen Eintrags einen Fehler aus. Kein Problem: Der Fehler wird einfach abgefangen und der fehlgeschlagene schreibende Zugriff auf die Tabelle schlicht ignoriert.

Damit durch eventuell enthaltene Hochkommata (') kein Fehler durch eine ungültige INSERT INTO-Anweisung ausgelöst wird, werden einzelne Hochkommata per Replace-Anweisung verdoppelt. Die Funktion kann außerdem noch einen Rückgabewert liefern, der eine semikola-separierte Liste aller Kategorien liefert.

Termine einlesen

Das Einlesen der eigentlichen Termine übernimmt die Prozedur aus Listing 2.

Listing 2: Einlesen der Termine in einem bestimmten Datumsbereich

Public Sub TermineEinlesen(datStart As Date, datende As Date)

    Dim objOutlook As Outlook.Application

    Dim objNamespace As Outlook.NameSpace

    Dim objFolder As Outlook.Folder

    Dim objItems As Outlook.Items

    Dim objAppointment As Outlook.AppointmentItem

    Dim strFilter As String

    Set objOutlook = New Outlook.Application

    Set objNamespace = objOutlook.GetNamespace("MAPI")

    Set objFolder = objNamespace.GetDefaultFolder(olFolderCalendar)

    Set objItems = objFolder.Items

    objItems.Sort "[Start]", False

    objItems.IncludeRecurrences = True

    strFilter = Datumsfilter(datStart, datende)

    Set objAppointment = objItems.Find(strFilter)

    While objAppointment Is Nothing

        With objAppointment

            TerminLoeschen .EntryID

        End With

        Set objAppointment = objItems.FindNext

    Wend

    Set objAppointment = objItems.Find(strFilter)

    While TypeName(objAppointment) <> "Nothing"

        With objAppointment

            TerminSpeichern .Subject, .Body, .Start, .End, .EntryID, .Categories

        End With

        Set objAppointment = objItems.FindNext

    Wend

End Sub

Die Prozedur erstellt ebenfalls ein Outlook-Objekt und einen MAPI-Namespace. Diesmal erfolgt der Zugriff auf den Ordner mit den Appointment-Elementen, der über die Funktion GetDefaultFolder(olFolderCalendar) referenziert wird. Dieser Ordner liefert eine Auflistung namens Items. Um alle Serientermine mit abzudecken, stellen Sie zunächst die Sortierung der enthaltenen Elemente auf das Feld Start ein und setzen dann die Eigenschaft IncludeRecurrences auf True. Die Funktion Datumsfilter liefert einen auf dem Start- und dem Enddatum basierenden Filterausdruck:

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:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.