Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA - Email speichern auf Laufwerk

VBA - Email speichern auf Laufwerk
11.01.2019 10:15:47
Arnd-Olav
Guten Morgen liebe VBA Gemeinde ;)
ich habe einen Code geschrieben, um eine in Outlook markierte eMail auf der Festplatte zu speichern.
Der Name der gespeicherten .msg Datei soll mit einem individuellen Text per Inbox starten, dann kommt das Wort "from" dann der Sendername, Subject und ein Datum/Zeitstempel.
Das Macro funktioniert, aber nicht immer. Ich finde den Fehler nicht, warum es mal durchläuft und mal nicht.
Kann das daran liegen, dass die Mails auf einem Netzwerklaufwerk gespeichert werden sollen, und die Verbindung manchmal zu langsam aufgebaut wird...oder so ähnlich?
Der Code sieht wie folgt aus:

Option Explicit
Public Sub SaveMessageAsMsg()
Dim oMail As Outlook.MailItem
Dim objItem As Object
Dim sPath As String
Dim dtDate As Date
Dim sName As String
Dim enviro As String
Dim sSenderName As String
Dim optName               As String
Dim inputData As String
enviro = CStr(Environ("USERPROFILE"))
inputData = InputBox("Enter the IPO Number", "Input Box Text")
' Check to see if any data was entered
If inputData  "" Then
For Each objItem In ActiveExplorer.Selection
If objItem.MessageClass = "IPM.Note" Then
Set oMail = objItem
sName = oMail.Subject
ReplaceCharsForFileName sName, ""
sSenderName = oMail.SenderName
dtDate = oMail.ReceivedTime
sName = inputData & " " & "from " & sSenderName & sName & Format(dtDate, "yymmdd",  _
vbUseSystemDayOfWeek, _
vbUseSystem) & ".msg"
sPath = "P:\CUSTOMERSERVICE\Kitting_Factory\Spares-Procurement\02_AOG_TEAM\ASOBB3\macro\mail\"
Debug.Print sPath & sName
oMail.SaveAs sPath & sName, olMSG
End If
Next
End If
Set objItem = Nothing
Set oMail = Nothing
End Sub
Private Sub ReplaceCharsForFileName(sName As String, _
sChr As String _
)
sName = Replace(sName, "'", sChr)
sName = Replace(sName, "*", sChr)
sName = Replace(sName, "/", sChr)
sName = Replace(sName, "\", sChr)
sName = Replace(sName, ":", sChr)
sName = Replace(sName, "?", sChr)
sName = Replace(sName, Chr(34), sChr)
sName = Replace(sName, "", sChr)
sName = Replace(sName, "|", sChr)
End Sub

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA - Email speichern auf Laufwerk
11.01.2019 12:00:04
mumpel
Hallo!
Ich sehe an Deinem Code dass Du den Betreff (Subject) nicht bereinigst. Sonderzeichen (Doppelpunkt,Slash etc.) sind in Dateinamen nicht erlaubt. Aber wie lautet denn die Fehlermeldung?
Gruß, René
AW: VBA - Email speichern auf Laufwerk
11.01.2019 12:38:40
Arnd-Olav
Er führt das MAcro einfach manchmal nicht aus. ich habe festgestellt das der Fehler in der Zeile
If objItem.MessageClass = "IPM.Note" Then
liegt.
Manche Mails erkennt er offenbar nicht als "IPM.Note".
Das hab ich nun komplett rausgeworfen.
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

E-Mails mit VBA in Outlook auf der Festplatte speichern


Schritt-für-Schritt-Anleitung

Um eine E-Mail in Outlook mithilfe von VBA auf der Festplatte zu speichern, kannst du den folgenden Code verwenden. Dieser speichert die E-Mail als .msg Datei mit einem individuell gestaltbaren Namen.

  1. Öffne Outlook und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Füge ein neues Modul hinzu: Einfügen -> Modul.
  3. Kopiere den folgenden Code in das Modul:
Option Explicit

Public Sub SaveMessageAsMsg()
    Dim oMail As Outlook.MailItem
    Dim objItem As Object
    Dim sPath As String
    Dim dtDate As Date
    Dim sName As String
    Dim enviro As String
    Dim sSenderName As String
    Dim inputData As String

    enviro = CStr(Environ("USERPROFILE"))
    inputData = InputBox("Enter the IPO Number", "Input Box Text")

    If inputData <> "" Then
        For Each objItem In ActiveExplorer.Selection
            If TypeOf objItem Is Outlook.MailItem Then
                Set oMail = objItem
                sName = oMail.Subject
                ReplaceCharsForFileName sName, ""
                sSenderName = oMail.SenderName
                dtDate = oMail.ReceivedTime
                sName = inputData & " from " & sSenderName & " " & sName & Format(dtDate, "yymmdd") & ".msg"
                sPath = "C:\Dein\Speicherort\" ' Ersetze dies mit deinem gewünschten Speicherort
                oMail.SaveAs sPath & sName, olMSG
            End If
        Next
    End If

    Set objItem = Nothing
    Set oMail = Nothing
End Sub

Private Sub ReplaceCharsForFileName(sName As String, sChr As String)
    sName = Replace(sName, "'", sChr)
    sName = Replace(sName, "*", sChr)
    sName = Replace(sName, "/", sChr)
    sName = Replace(sName, "\", sChr)
    sName = Replace(sName, ":", sChr)
    sName = Replace(sName, "?", sChr)
    sName = Replace(sName, Chr(34), sChr)
    sName = Replace(sName, "", sChr)
    sName = Replace(sName, "|", sChr)
End Sub
  1. Schließe den VBA-Editor und speichere deine Änderungen.
  2. Wähle die E-Mails aus, die du speichern möchtest, und führe das Makro aus.

Häufige Fehler und Lösungen

  • Problem: Das Makro wird nicht immer ausgeführt.

    • Lösung: Überprüfe die Zeile If TypeOf objItem Is Outlook.MailItem Then. Wenn die E-Mail nicht als MailItem erkannt wird, könnte es an der Art der E-Mail liegen. Stelle sicher, dass du nur E-Mails auswählst.
  • Problem: Sonderzeichen im Betreff führen zu einem Fehler beim Speichern.

    • Lösung: Der Code enthält die Funktion ReplaceCharsForFileName, die unerlaubte Zeichen aus dem Betreff entfernt. Achte darauf, diese Funktion korrekt zu verwenden.

Alternative Methoden

Wenn du keine VBA-Lösung verwenden möchtest, kannst du die E-Mail auch manuell speichern:

  1. Öffne die E-Mail in Outlook.
  2. Gehe zu Datei -> Speichern unter.
  3. Wähle den Speicherort und das Dateiformat .msg.

Diese Methode ist jedoch weniger automatisiert und bietet nicht die Flexibilität eines VBA-Skripts.


Praktische Beispiele

  • Beispiel 1: Speichern einer E-Mail mit dem Betreff "Angebot" und dem Sender "Mustermann":

    • Nach der Ausführung des Makros könnte die gespeicherte Datei IPO123 from Mustermann Angebot 20231025.msg heißen, wenn das aktuelle Datum der 25. Oktober 2023 ist.
  • Beispiel 2: Erstelle ein Outlook-Makro, um mehrere E-Mails in einem Rutsch zu speichern. Wähle dazu mehrere E-Mails aus und führe das obenstehende Makro aus.


Tipps für Profis

  • Nutze den Debug.Print Befehl, um den Pfad und den Dateinamen im Direktfenster anzuzeigen. Dies hilft, Fehler zu identifizieren.
  • Überlege, ob du das Skript anpassen möchtest, um E-Mails automatisch in bestimmte Unterordner zu speichern, abhängig von bestimmten Kriterien (z.B. Absender oder Betreff).
  • Teste dein Makro in einer sicheren Umgebung, bevor du es auf wichtige E-Mails anwendest.

FAQ: Häufige Fragen

1. Wie kann ich das VBA-Skript anpassen, um E-Mails in einen bestimmten Ordner zu speichern?
Du kannst den sPath-String im Skript anpassen, um den gewünschten Ordner anzugeben.

2. Funktioniert dieses Skript auch in älteren Versionen von Outlook?
Ja, das Skript sollte in den meisten modernen Outlook-Versionen funktionieren, die VBA unterstützen. Stelle sicher, dass du die entsprechende Version verwendest.

3. Wie kann ich sicherstellen, dass das Makro immer funktioniert?
Achte darauf, dass die E-Mails, die du speichern möchtest, korrekt ausgewählt sind und keine unerwarteten Elemente in der Auswahl sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige