Kunde zu einer E-Mail öffnen

Viele Access-Benutzer dürften, wenn Sie schon das Office-Paket auf dem Rechner haben, auch Outlook nutzen – zumindest, um E-Mails zum empfangen, zu senden und zu bearbeiten. Vielen fehlt dabei die Möglichkeit einer stärkeren Interaktion zwischen Access und Outlook, beispielsweise bei Verwendung einer Kundenverwaltung. Eine pfiffige Möglichkeit wäre es, beim Anzeigen einer E-Mail von einem bestimmten Kunden direkt den Kundendatensatz in der Kundenverwaltung zu öffnen. Dies sollte dann auch noch auf möglichst einfache Art und Weise geschehen, beispielsweise per Tastenkombination. Wie das gelingt, zeigt der vorliegende Beitrag.

In einem anderen Beitrag mit dem Titel Outlook-Mails per Tastenkombination verschieben (www.access-im-unternehmen.de/1290) haben wir bereits gezeigt, wie Sie Aktionen für die aktuell markierte E-Mail per Tastenkombination ausführen können.

Im vorliegenden Beitrag wollen wir die Verbindung zwischen der dort beschriebenen reinen Outlook-Technik und Access herstellen. Dazu wollen wir, wenn der Benutzer eine bestimmte Tastenkombination für die aktuell angezeigte E-Mail betätigt, die folgenden Schritte ausführen:

  • Die E-Mail-Adresse des Absenders dieser E-Mail ermitteln,
  • prüfen, ob die Kundendatenbank bereits geöffnet ist und diese gegebenenfalls öffnen, wobei dann die E-Mail-Adresse übergeben werden soll und
  • den Kunden mit der betreffenden E-Mail-Adresse im Kunden-Formular anzeigen.

Ob die Kunden-Datenbank bereits geöffnet ist oder nicht bringt noch eine wichtige Unterscheidung mit sich: Wenn sie noch nicht geöffnet ist, haben wir es etwas einfacher. Wir brauchen die Datenbank dann nämlich einfach nur zu öffnen, was relativ einfach ist, und dabei die entsprechende E-Mail-Adresse zu übergeben. Wenn die Access-Anwendung bereits geöffnet ist, wird es etwas komplizierter, denn dann müssen wir per VBA zunächst die Access-Anwendung referenzieren und diese dann so fernsteuern, dass sie den gewünschten Kunden anzeigt.

Wir wollen jedoch mit dem Aufruf beginnen.

E-Mail auswählen und den Prozess starten

Die Grundlagen zu diesem Schritt haben wir ausführlich in dem eingangs erwähnten Beitrag beschrieben. Dabei haben wir eine VBA-Prozedur erstellt, welche die aktuelle E-Mail ermittelt und dann etwas damit erledigt.

Einige der dort verwendeten Techniken übernehmen wir für die nachfolgend vorgestellte Prozedur namens ShowCustomerInAccess, die Sie in Listing 1 finden (die nachfolgend beschriebenen Routinen geben Sie in einem neuen Standardmodul des VBA-Projekts von Outlook ein, das Sie von Outlook aus mit der Tastenkombination Alt + F11 öffnen). Diese Prozedur schreibt den Pfad zur Kundenverwaltungs-Datenbank in die Variable strDatabase und referenziert den aktuell im Outlook-Explorer-Bereich angezeigten Ordner mit der Variablen objCurrentFolder.

Public Sub ShowCustomerInAccess()
     Dim objMailItem As MailItem
     Dim objExplorer As Explorer
     Dim objSelection As Selection
     Dim objCurrentFolder As Folder
     Dim objNamespace As NameSpace
     Dim objAccess As Access.Application
     Dim strMail As String
     Dim strDatabase As String
     Dim db As DAO.Database
     strDatabase = "C:\...\Kundenverwaltung.accdb"
     Set objExplorer = Application.ActiveExplorer
     Set objCurrentFolder = objExplorer.CurrentFolder
     If objCurrentFolder.Name = "Posteingang" Then
         Set objSelection = objExplorer.Selection
         Set objNamespace = Application.GetNamespace("MAPI")
         If Not objSelection.count = 1 Then
             MsgBox ("Bitte selektieren Sie genau eine E-Mail.")
             Exit Sub
         End If
         Select Case TypeName(objSelection.Item(1))
             Case "MailItem"
                 Set objMailItem = objSelection.Item(1)
                 strMail = objMailItem.SenderEmailAddress
                 Set objAccess = GetDatabase(strDatabase)
                 If objAccess Is Nothing Then
                     Set db = OpenDatabase(strDatabase)
                     If CustomerExists(db, strMail) Then
                         OpenDatabaseInAccess strDatabase, strMail
                     Else
                         MsgBox "Es existiert kein Kunde mit der E-Mail-Adresse ''" _
                             & strMail & "''"
                     End If
                     Set db = Nothing
                 Else
                     ShowCustomer objAccess, strMail
                 End If
         End Select
     End If
End Sub

Listing 1: Prozedur zum Anzeigen eines Kunden in Access

Heißt dieser Ordner Posteingang, wird der Rest der Prozedur ausgeführt. Wenn Sie nicht die deutschsprachige Outlook-Version verwenden, heißt der Ordner möglicherweise anders, in diesem Fall müssen Sie den Code entsprechend anpassen. Die Prozedur erfasst mit der Variablen objSelection die aktuelle Auswahl in diesem Ordner. Wenn die mit Count ermittelte Anzahl der markierten Elemente nicht 1 lautet, erscheint eine entsprechende Meldung und die Prozedur wird beendet.

Anderenfalls prüft die Prozedur, ob es sich um ein Element des Typs MailItem handelt. Ist das der Fall, weist die Prozedur das markierte Objekt der Variablen objMailItem zu. Danach liest es die E-Mail-Adresse des Absenders aus der Eigenschaft SenderEmailAddress aus und schreibt sie in die Variable strMail.

Anschließend versucht die Prozedur, mit der Funktion GetDatabase auf eine laufende Instanz der Datenbank aus strDatabase zugreifen. Liefert diese kein Objekt zurück, bleibt objAccess leer. Die Prozedur durchläuft dann den If-Teil der Bedingung.

Hier erstellt sie mit OpenDatabase einen Verweis auf das Database-Objekt der Datenbank und referenziert dieses mit der Variablen db. Damit ruft sie die Funktion CustomerExists auf, die prüft, ob die Datenbank einen Kunden mit der angegebenen E-Mail-Adresse enthält. Falls ja, ruft die Prozedur eine weitere Routine namens OpenDatabaseInAccess auf, welche die Kundenverwaltung öffnen und die E-Mail-Adresse des gesuchten Kunden als Parameter übergeben soll.

Liefert CustomerExists den Wert False zurück, zeigt die Prozedur eine Meldung an, dass kein Kunde mit der angegebenen E-Mail-Adresse gefunden werden konnte.

Es gibt noch den Fall, dass die Funktion GetDatabase einen Verweis auf eine Access-Anwendung zurückgeliefert hat. Diese wird im Else-Zweig der entsprechenden Bedingung behandelt. Dieser Teil ruft die Prozedur ShowCustomer auf und übergibt dieser einen Verweis auf die gefundene Access-Instanz und die E-Mail-Adresse des gesuchten Kunden.

Die hier aufgerufenen Funktionen und Prozeduren beschreiben wir in den folgenden Abschnitten.

Datenbank holen mit GetDatabase

Die erste Funktion, die wir benötigen, heißt GetDatabase. Sie erwartet den Pfad der zu holenden Datenbank als Parameter und liefert eine Objektvariable des Typs Access.Application zurück (siehe Listing 2).

Public Function GetDatabase(strDatabase As String) As Access.Application
     Dim objAccess As Access.Application
     If IsDatabaseOpen(strDatabase) Then
         Set objAccess = GetObject(strDatabase)
     End If
     Set GetDatabase = objAccess
End Function

Listing 2: Funktion zum Holen eines Access.Application-Objekts

Die Funktion ruft eine weitere Funktion namens IsDatabaseOpen auf, der ebenfalls der Pfad zu der betroffenen Datenbank übergeben wird. Diese Funktion, die wir im Anschluss beschreiben, prüft, ob die mit strDatabase angegebene Datenbank geöffnet ist. Ist das der Fall, verwendet die Funktoin GetDatabase die VBA-Funktion GetObject mit Angabe des Datenbankpfades, um einen Verweis auf das entsprechende Access.Application-Objekt zu holen. Der Inhalt der Variablen objAccess wird dann als Funktionswert der Funktion GetDatabase an die aufrufende Funktion zurückgegeben. Dabei kann objAccess an dieser Stelle auch leer sein, also den Wert Nothing enthalten.

Auf geöffnete Datenbank prüfen mit IsDatabaseOpen

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar