Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Excel VBA Speichern unter des per VBA gesendeten E-Mail

Excel VBA Speichern unter des per VBA gesendeten E-Mail
09.08.2023 14:54:01
Christian Fuchs
Hallo Zusammen,

ich habe in Excel ein Programm in VBA geschrieben, welches eine E-Mail generiert, welche ich dann "von Hand" abschicke.

Ist es möglich, die gesendete E-Mail aus dem Outlook-Ordner "gesendete Elemente" zu "ziehen" und in einem bestimmten Pfad abzulegen?

Heißt: Ich möchte das E-Mail für alle zugänglich auf dem Laufwerk ablegen, welches als Nachweis dient, dass das E-Mail gesendet wurde.

Vielen Dank!

Grüße
Christian
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel VBA Speichern unter des per VBA gesendeten E-Mail
09.08.2023 16:45:46
Oberschlumpf
Hi Christian,

hier, versuch mal


Sub test()

Dim objApp As Object ' Outlook.Application
Dim objItem As Object ' Outlook.MailItem
Dim objFolder As Object
Dim item As Object
Dim i As Long
Dim x As String

Set objApp = CreateObject("Outlook.Application")
Set objFolder = objApp.GetNameSpace("MAPI").GetDefaultfolder(5) ' 5 = olFolderSentMail

i = 1

For Each item In objFolder.Items
If TypeName(item) = "MailItem" Then
If item.Subject = Range("A1").Value Then
i = i + 1
x = item.CreationTime
x = x & ", " & item.Subject
Debug.Print x
item.SaveAs "d:\herber\" & Replace(item.Subject, ":", "") & ".msg" 'den Pfad musst du natürlich anpassen
Exit For
End If
End If
Next

End Sub


Du schreibst, dass du die besagte Mail "von Hand" abschickst.
So müsstest du in deinem Code noch angeben, dass für meinen Code in Zelle A1 der Betreff deiner besagten Mail gespeichert wird (anstelle von A1 kannst du natürlich auch jeden anderen Weg wählen; wichtig ist nur, dass meinem Code der Betreff von deiner Mail bekannt ist)(du könntest meinen Code auch mit Betreff als Parameter aufrufen)

So, mein Code durchsucht nun den Ordner für gesendete Mails.
Wenn Mail mit dem richtigen Betreff gefunden, wird diese Mail im nächsten Schritt im von dir angegebenen Ordner mit Betreff als Dateiname als .msg-Datei gespeichert - fertig.
Ach so...ich "musste" noch Replace() verwenden, weil ausgerechnet die Mail, die ich als Testmail verwendet habe, im Betreff einen Doppelpunkt enthält - und Doppelpunkte in Dateinamen vertragen sich bekanntermaßen ja genau so wenig wie Feuer und Wasser :-)
Wenn du dich nach genügend Tests also auch entschließt, deinen Betreff als Dateiname zu verwenden, musst du vor dem Speichern vllt noch andere Zeichen eliminieren.

Hilfts?

Ciao
Thorsten
Anzeige
AW: Excel VBA Speichern unter des per VBA gesendeten E-Mail
11.08.2023 15:01:09
Oberschlumpf
na, hast du keine Zeit zu antworten - oder hast du keine Lust?
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Excel VBA: Gesendete E-Mails speichern


Schritt-für-Schritt-Anleitung

  1. Öffne dein Excel-Dokument und aktiviere den VBA-Editor mit ALT + F11.

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (deineDatei.xlsm)" > Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub test()
       Dim objApp As Object   ' Outlook.Application
       Dim objFolder As Object
       Dim item As Object
       Dim x As String
    
       Set objApp = CreateObject("Outlook.Application")
       Set objFolder = objApp.GetNamespace("MAPI").GetDefaultFolder(5) ' 5 = olFolderSentMail
    
       For Each item In objFolder.Items
           If TypeName(item) = "MailItem" Then
               If item.Subject = Range("A1").Value Then
                   x = item.CreationTime & ", " & item.Subject
                   Debug.Print x
                   item.SaveAs "d:\herber\" & Replace(item.Subject, ":", "") & ".msg" ' Pfad anpassen
                   Exit For
               End If
           End If
       Next
    End Sub
  4. Passe den Pfad an: Ändere d:\herber\ auf den gewünschten Speicherort.

  5. Speichere das Workbook als .xlsm, damit das Makro funktioniert.

  6. Gib den Betreff der E-Mail in Zelle A1 ein, bevor du das Makro ausführst.


Häufige Fehler und Lösungen

  • Fehler: E-Mail wird nicht gefunden: Stelle sicher, dass der Betreff in Zelle A1 genau mit dem Betreff der gesendeten E-Mail übereinstimmt.
  • Fehler: Pfad nicht gefunden: Vergewissere dich, dass der angegebene Speicherort existiert und du die richtigen Berechtigungen hast.
  • Fehler: Speichern als .msg funktioniert nicht: Achte darauf, dass der Betreff keine ungültigen Zeichen für Dateinamen enthält. Nutze Replace(), um unerwünschte Zeichen zu entfernen.

Alternative Methoden

  • Excel Makro drucken als PDF: Anstelle des Speicherns als .msg, kannst du das Dokument auch direkt als PDF speichern. Ändere den Code entsprechend:

    item.SaveAs "d:\herber\" & Replace(item.Subject, ":", "") & ".pdf", 17 ' 17 steht für PDF
  • Excel Tabellenblatt per Mail versenden: Verwende die SendMail-Methode, um ein Excel-Dokument als Anhang zu versenden.


Praktische Beispiele

  • Speichern von gesendeten E-Mails: Mit dem obenstehenden Code kannst du jede gesendete E-Mail mit einem spezifischen Betreff speichern, was als Nachweis über gesendete E-Mails dient.
  • Daten aus einer anderen Datei auslesen: Du kannst auch Daten aus einer anderen Excel-Datei in dein Makro einfügen, um den Betreff dynamisch zu bestimmen.

Tipps für Profis

  • Automatisierung: Überlege, ob du den Prozess automatisieren kannst, indem du das Makro bei bestimmten Ereignissen (z. B. beim Schließen der Datei) ausführst.
  • Fehlerbehandlung: Füge Fehlerbehandlungsroutinen hinzu, um sicherzustellen, dass dein Makro robust ist. Beispiel:

    On Error Resume Next
    ' Dein Code hier
    On Error GoTo 0

FAQ: Häufige Fragen

1. Wie kann ich das Makro ausführen? Um das Makro auszuführen, gehe zurück zu Excel, drücke ALT + F8, wähle test aus und klicke auf "Ausführen".

2. Kann ich das Makro auch in anderen Excel-Versionen verwenden? Ja, das Makro sollte in den meisten modernen Excel-Versionen funktionieren, die VBA unterstützen (z.B. Excel 2010 und höher).

3. Wie kann ich sicherstellen, dass keine Abfragen beim Schließen erscheinen? Du kannst die Anwendung so einstellen, dass sie ohne Speicherung schließt, indem du Application.DisplayAlerts = False vor dem Schließen verwendest.

4. Wie kann ich eine E-Mail im HTML-Format speichern? Leider unterstützt die SaveAs-Methode für MailItems nur die Formate .msg, .txt und .csv. Alternativ kannst du den Inhalt in eine Excel-Datei exportieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige