E-Mails mit Anlagen mit Outlook versenden

Das Versenden von E-Mails haben wir bereits ausführlich in Access im Unternehmen beschrieben. Dort kam auch gelegentlich das Thema auf, wie Sie Dateien an solche E-Mails anhängen. Allerdings gibt es bei genauerem Hinsehen Anforderungen, die wir noch nicht behandelt haben – zum Beispiel das Anhängen vieler Dateien auf einen Rutsch oder auch das Hinzufügen von Dateien, die nicht aus einem Verzeichnis stammen. Hierzu sind dann mehrere Aufrufe des jeweiligen Dialogs zum Auswählen der Dateien erforderlich. Auf diese Spezialfälle gehen wir im vorliegenden Beitrag ein.

Anforderungen an die Beispiellösung

Dieser Beitrag soll eine Beispiellösung mit folgenden Funktionen beschreiben:

  • Versenden einer E-Mail unter Angabe von Empfänger, Betreff und Inhalt
  • Hinzufügen von Anlagen über einen Dateiauswahldialog. Dabei sollen mehrere Anlagen aus einem Verzeichnis gleichzeitig selektiert werden können und beim Hinzufügen weiterer Anlagen aus einem weiteren Verzeichnis sollen die bereits hinzugefügten Anlagen erhalten bleiben.
  • Bereits hinzugefügte Anlagen sollen markiert und aus der E-Mail gelöscht werden können.

Vorbereitungen

Wir benötigen Verweise auf zwei VBA-Bibliotheken. Diese fügen Sie dem VBA-Projekt über den Verweise-Dialog hinzu, den Sie mit dem Menübefehl Extras|Verweise des VBA-Editors öffnen:

  • Microsoft Office x.0 Object LIbrary: Liefert das FileDialog-Objekt, mit dem wir den Dialog zum Auswählen der Anlagen anzeigen.
  • Microsoft Outlook x.0 Object Library: Stellt das Mail-Item-Objekt zum Versenden der E-Mail bereit.

Mit den beiden hinzugefügten Verweisen sieht der Verweise-Dialog wie in Bild 1 aus.

Verweise des VBA-Projekts

Bild 1: Verweise des VBA-Projekts

Formular zum Erstellen der E-Mail mit Anlage

Das Formular, von dem aus wir das Versenden von E-Mails mit Anlagen steuern wollen, heißt frmMailsMitAttachment und sieht in der Entwurfsansicht wie in Bild 2 aus. Das Formular verwendet die folgenden Steuerelemente:

Formular in der Entwurfsansicht

Bild 2: Formular in der Entwurfsansicht

  • txtAn: Dient der Erfassung des Empfängers der E-Mail.
  • txtBetreff: Nimmt den Betreff der E-Mail auf.
  • txtInhalt: Hier können Sie den Inhalt der E-Mail eingeben.
  • lstAnlagen: Listenfeld zur Anzeige der bereits hinzugefügten Anlagen. Das Listenfeld soll die Mehrfachauswahl erlauben, damit auch mehrere Anlagen gleichzeitig wieder aus der Liste entfernt werden können. Dazu legen wir für die Eigenschaft Mehrfachauswahl den Wert Erweitert fest. Außerdem stellen wir für dieses Listenfeld die Eigenschaften Horizontaler Anker und Vertikaler Anker auf Beide ein, damit das Listenfeld mit dem Formular vergrößert werden kann. Damit das dazugehörige Bezeichnungsfeld an Ort und Stelle bleibt, erhalten Horizontaler Anker und Vertikaler Anker hier die Werte Links und Oben. Damit wir die ausgewählten Dateien einzeln hinzufügen können, stellen wir außerdem die Eigenschaft Herkunftstyp auf Wertliste ein.
  • cmdHinzufuegen: Öffnet einen Dateiauswahldialog zum Auswählen der hinzuzufügenden Anlagen und fügt diese nach der Auswahl zum Listenfeld lstAnlagen hinzu.
  • cmdLoeschen: Löscht die aktuell markierten Einträge des Listenfeldes. Die Schaltfläche soll nur markiert sein, wenn im Listenfeld lstAnlagen mindestens ein Eintrag markiert ist.
  • cmdSenden: Sendet die E-Mail mit den Angaben der Felder txtAn, txtBetreff und txtInhalt und mit den im Listenfeld lstAnlagen angegebenen Dateien. Für diese Schaltfläche stellen wir die Eigenschaft Vertikaler Anker auf Unten ein, damit es beim Vergrößern des Formulars unten verankert ist.

Die Eigenschaften Datensatzmarkierer, Navigationsschaltflächen, Bildlaufleisten und Trennlinien sollen den Wert Nein und die Eigenschaft Automatisch zentrieren den Wert Ja haben.

Anlagen zur Liste hinzufügen

Die Schaltfläche cmdHinzufuegen soll einen Dateiauswahldialog öffnen, mit dem der Benutzer eine oder mehrere Dateien aus einem Verzeichnis auswählen und zur Liste hinzufügen kann. Die Liste zeigt die Dateien dann mit dem vollständigen Pfad an. Dabei wollen wir das mehrfache Hinzufügen von Dateien unterbinden. Dies wäre möglich, da wir erlauben wollen, dass der Benutzer durch mehrfaches Anklicken der Hinzufügen-Schaltfläche auch mehrfach Dateien aus dem gleichen Verzeichnis hinzufügen könnte.

Also prüfen wir vor dem Hinzufügen einer Datei zum Listenfeld lstAnlagen, ob diese bereits in der Liste enthalten ist.

Die durch die Schaltfläche cmdHinzufuegen ausgelöste Prozedur finden Sie in Listing 1. Hier deklarieren wir zwei Laufvariablen sowie das FileDialog-Objekt und eine Boolean-Variable. Die Variable objFileDialog füllen wir mit einem Objekt der Klasse FileDialog mit dem Typ msoFileDialogPicker – mehr Informationen über diese Klasse finden Sie im Beitrag Dateien und Verzeichnisse auswählen mit FileDialog (www.access-im-unternehmen.de/****).

Private Sub cmdHinzufuegen_Click()
     Dim objFileDialog As FileDialog
     Dim l As Long
     Dim m As Long
     Dim bolVorhanden As Boolean
     Set objFileDialog = FileDialog(msoFileDialogFilePicker)
     With objFileDialog
         .AllowMultiSelect = True
         .Title = "Anlagen auswählen"
         .Filters.Clear
         .Filters.Add "Alle Dateien", "*.*"
         .ButtonName = "Hinzufügen"
         If .Show = True Then
             For l = 1 To .SelectedItems.Count
                 If Not Len(Me!lstAnlagen.RowSource + .SelectedItems(l)) > 32750 Then
                     bolVorhanden = False
                     For m = 1 To Me!lstAnlagen.ListCount
                         If Me!lstAnlagen.ItemData(m) = .SelectedItems(l) Then
                             bolVorhanden = True
                             Exit For
                         End If
                     Next m
                     If Not bolVorhanden Then
                         Me!lstAnlagen.AddItem .SelectedItems(l)
                     End If
                 Else
                     MsgBox "Es können keine weiteren Dateien zur Liste hinzugefügt werden."
                     Exit Sub
                 End If
             Next l
         End If
     End With
End Sub

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