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

Forumthread: Email mit Betreff, Datum ... in Ordner speichern

Email mit Betreff, Datum ... in Ordner speichern
27.05.2015 09:47:51
Ralf
Hallo,
ich möchte gerne meine E-Mails archivieren. Hierzu habe ich mir ein Makro aus dem Forum kopiert und in Outlook eingefügt. Funktioniert soweit. Nun möchte ich dieses Makro soweit erweitern bzw. ergänzen das ich die E-Mails mit Betreff, Absender, Datum... im Dateinamen abspeichern kann. Ich habe schon versucht aus anderen Makros hier weitere Teil zu ergänzen, leider bin ich in VBA bisher nur Anwender und habe leider noch kaum Erfahrung im selbst erstellen von Makros. Daher hatte ich mit dieser Methode wenig Erfolg. Kann mir jemand helfen und mir den Code soweit erweitern, das ich beim speichern den Betreff, Absender, Datum usw. auch gleich im Dateinamen mit drin habe?
Vielen Dank für eure Hilfe.
Gruß Ralf
Hier noch das Makro:
Sub EmailSpeichernUnter()
On Error GoTo Ende
Dim obj As Object
Dim objNewMail As MailItem
Dim F As Outlook.MAPIFolder
Dim olInspector As Inspector
Dim objInspector As Inspector
Dim Datei As String
Dim intAnlagen As String
Dim SaveInPath As String
Dim oMailSendFromAccount As String
Dim strNewFolder As String
Dim objSubject As String
Dim SpeichernAls As OPENFILENAME
Dim ExistiertDatei
Dim i As Integer
If GetSetting("RMH_Installationen", "Outlook", "SaveInPath") = "" Then
SaveInPath = InputBox("Sie haben noch keinen Standardpfad definiert." & vbCrLf & _
"Bitte geben Sie jetzt den Pfad an, in welchem" & vbCrLf & _
"die Dateien standardmäßig gespeichert werden sollen!")
SaveSetting "RMH_Installationen", "Outlook", "SaveInPath", SaveInPath
End If
SaveInPath = GetSetting("RMH_Installationen", "Outlook", "SaveInPath")
If TypeOf Application.ActiveWindow Is Outlook.Explorer Then
Set obj = Application.ActiveWindow
Set obj = obj.Selection(1)
Else
Set objInspector = ActiveInspector
objInspector.Activate
If objInspector.IsWordMail Then
Set obj = Application.ActiveInspector.CurrentItem
End If
End If
With SpeichernAls
.lStructSize = Len(SpeichernAls)
.hWndOwner = FindWindow("XLMAIN", "Outlook")
.hInstance = GetModuleHandle("Outlook.EXE")
.lpstrFilter = "Email-Dateien (*.msg)" & vbNullChar & "*.msg" & vbNullChar & vbNullChar
.lpstrCustomFilter = vbNullString
.nFilterIndex = 1
.lpstrFile = Space(255) & vbNullChar
.nMaxFile = Len(.lpstrFile)
.lpstrFileTitle = Len(.lpstrFileTitle)
.lpstrInitialDir = SaveInPath
.lpstrTitle = "Email speichern"
.flags = OFN_EXTENSIONDIFFERENT
End With
If GetSaveFileName(SpeichernAls) = 0 Then Exit Sub
Datei = SpeichernAls.lpstrFile
Datei = Left(Datei, InStr(1, Datei, vbNullChar) - 1)
If Right(Datei, 3)  ".msg" Then Datei = Datei & ".msg"
On Error Resume Next
ExistiertDatei = Not CBool(GetAttr(Datei) And (vbVolume))
On Error GoTo 0
If Datei = "Falsch" Then Exit Sub
If ExistiertDatei Then
If MsgBox("Diese Datei existiert schon!" & vbCrLf & _
"Möchten Sie sie überschreiben?", vbYesNo, "Datei existiert schon!") = vbNo Then
MsgBox "Datei wurde nicht exportiert", vbInformation, "Abgebrochen"
Exit Sub
End If
End If
With obj
Datei = Replace(Datei, ".msg", "")
.SaveAs Datei & "_" & Date & "_" & SenderName & ".msg"
If MsgBox("Möchten Sie die Anhänge speichern?", vbYesNo + vbQuestion, "Frage") = vbYes Then
intAnlagen = .Attachments.Count
If intAnlagen > 0 Then
For i = 1 To intAnlagen
.Attachments.Item(i).SaveAsFile SaveInPath & "\" & .Attachments.Item(i).FileName
Next i
End If
End If
.Delete
End With
Ende:
End Sub

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Email mit Betreff, Datum ... in Ordner speichern
27.05.2015 11:47:02
mumpel
Hallo!
Unten bei "With obj" die Zeile zum Speichern anpassen.
.SaveAs .Subject & "_" & .SenderName & "_" & Date & ".msg"
Im Objektkatalog (Taste F2 im VBA-Editor) kannst Du alle Parameter zum Emailobjekt nachlesen.
Es gibt auch Tools die das machen. Z.B. Gangl MailMover, da kannst Du als Dateiname verschiedene Einstellungen nutzen.
Gruß, rené

Anzeige
Nachtrag
27.05.2015 11:50:10
mumpel
Beim Betreff (Subject) müssen alle Sonderzeichen (Fragezeichen, Slash, Backslash, Doppelpunkt etc), also alle Zeichen die in Dateinamen nicht erlaubt sind, mit der Replace-Methode entfernt werden.

AW: Email mit Betreff, Datum ... in Ordner speichern
27.05.2015 14:26:15
Ralf
Hallo Renè,
vielen Dank für deine schnelle Hilfe. Ich hab das Makro ergänzt. Funktioniert sogar (hätte nicht gedacht das es so einfach ist) :) Noch eine Frage: Wie bekomme ich das Datum an die erste Stelle des Dateinamens? ". SaveAs Date &" funktioniert nicht.
Nochmals vielen Dank für deine Hilfe.
Ralf

Anzeige
AW: Email mit Betreff, Datum ... in Ordner speichern
27.05.2015 18:14:49
mumpel
.SaveAs Format(Now, "DD-MM-YYYY") & "_" & .Subject & "_" & .SenderName & ".msg"

AW: Email mit Betreff, Datum ... in Ordner speichern
28.05.2015 07:45:31
Ralf
Danke.

AW: Email mit Betreff, Datum ... in Ordner speichern
28.05.2015 09:39:24
Ralf
Hallo Renè,
jetzt habe ich nochmal eine Frage und hoffe das dies nun auch meine letzte ist und ich eure / deine Zeit nicht weiter in Anspruch nehmen muss. Ich habe versucht über die Replace Methode die Sonderzeichen aus dem Betreff zu tauschen. Aber irgendwie macht er nichts. Weist Du wo mein Fehler liegen könnte?

With obj
Datei = Replace(Datei, ".msg", "")
Datei = Replace(.Subject, ": ", "_")
Datei = Replace(.Subject, "- ", "_")
Datei = Replace(.Subject, " ", "_")
Datei = Replace(.Subject, ".", "_")
Datei = Replace(.Subject, "/", "_")
Datei = Replace(.Subject, "", "_")
Datei = Replace(.Subject, "?", "_")
Datei = Replace(.Subject, "/", "_")
Datei = Replace(.Subject, "\", "_")
Datei = Replace(.Subject, "*", "_")
Datei = Replace(.Subject, ":", "_")
.SaveAs Format(Date, "mm_dd_yy") & "_" & .Subject & "_" & .SenderName & "_" & .ReceivedByName &  _
".msg"
'.SaveAs Datei & "_" & Date & "_" & SenderName & ".msg" ersetzt
If MsgBox("Möchten Sie die Anhänge speichern?", vbYesNo + vbQuestion, "Frage") = vbYes Then
intAnlagen = .Attachments.Count
If intAnlagen > 0 Then
For i = 1 To intAnlagen
.Attachments.Item(i).SaveAsFile SaveInPath & "\" & .Attachments.Item(i).FileName
Next i
End If
End If
.Delete
End With
Ende:
End Sub
Gruß Ralf

Anzeige
AW: Email mit Betreff, Datum ... in Ordner speichern
28.05.2015 10:57:02
mumpel
Du hast zwar in "Datei" die Sonderzeichen entfernt, aber bei "SaveAs" die Variable nicht angegeben.
Hier mal ein Code der besser aussieht.
Dim lngVarSZ         As Long
Dim strTxtSZ         As String
Const strReplaceSZ   As String = "_.;:_#äüö+?)=%$&(/\"

 With obj
      strTxtSZ = .Subject
      
         Rem Sonderzeichen entfernen 
         For lngVarSZ = 1 To Len(strReplaceSZ)
             strTxtSZ = Replace(strTxtSZ, Mid(strReplaceSZ, lngVarSZ, 1), " ")
         Next lngVarSZ
        
         Rem Email speichern 
         .SaveAs "C:\" & Format(Now, "DD-MM-YYYY") & "_" & _
                 strTxtSZ & "_" & .SenderName & ".msg", olMSG
 
 End With

VBA/HTML - CodeConverter für Office-Foren, AddIn für Office 2002-2013 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:mumpel

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0


Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

E-Mails in Outlook mit Datum, Absender und Betreff speichern


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor in Outlook:

    • Drücke Alt + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul:

    • Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden VBA-Code ein:

    Sub EmailSpeichernUnter()
       On Error GoTo Ende
       Dim obj As Object
       Dim objNewMail As MailItem
       Dim SaveInPath As String
       Dim Datei As String
       Dim intAnlagen As String
       Dim strNewFolder As String
    
       ' Standardpfad abfragen
       SaveInPath = InputBox("Geben Sie den Pfad an, in dem die Dateien gespeichert werden sollen:")
    
       ' E-Mail auswählen
       Set obj = Application.ActiveExplorer.Selection(1)
    
       ' Dateinamen mit Betreff, Absender und Datum erstellen
       Datei = SaveInPath & "\" & Format(Now, "DD-MM-YYYY") & "_" & Replace(obj.Subject, ":", "_") & "_" & obj.SenderName & ".msg"
    
       ' E-Mail speichern
       obj.SaveAs Datei, olMSG
    
       ' Anhänge speichern
       If MsgBox("Möchten Sie die Anhänge speichern?", vbYesNo) = vbYes Then
           intAnlagen = obj.Attachments.Count
           For i = 1 To intAnlagen
               obj.Attachments.Item(i).SaveAsFile SaveInPath & "\" & obj.Attachments.Item(i).FileName
           Next i
       End If
    
    Ende:
    End Sub
  4. Makro ausführen:

    • Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.

Häufige Fehler und Lösungen

  • Fehler: "Datei existiert bereits!"

    • Lösung: Füge eine Abfrage hinzu, die fragt, ob die Datei überschrieben werden soll.
  • Fehler: Sonderzeichen im Dateinamen

    • Lösung: Verwende die Replace-Methode, um unerlaubte Zeichen zu entfernen. Beispiel:
      Datei = Replace(.Subject, ":", "_")
  • Fehler: E-Mail nicht gefunden

    • Lösung: Stelle sicher, dass eine E-Mail in Outlook ausgewählt ist, bevor das Makro ausgeführt wird.

Alternative Methoden

Wenn das VBA-Makro nicht die gewünschte Funktionalität bietet, kannst Du auch Tools wie "Gangl MailMover" nutzen. Diese Software ermöglicht es, E-Mails mit verschiedenen Einstellungen zu speichern, einschließlich des Dateinamens.


Praktische Beispiele

  1. E-Mail mit Datum und Absender speichern:

    • Der Dateiname wird automatisch erstellt als DD-MM-YYYY_Betreff_Absender.msg.
  2. Sonderzeichen im Betreff entfernen:

    • Vor dem Speichern wird der Betreff bereinigt, um sicherzustellen, dass keine unerlaubten Zeichen vorkommen:
      Datei = Replace(.Subject, ":", "_")

Tipps für Profis

  • Standardpfad speichern: Du kannst den Standardpfad für das Speichern der E-Mails in den Einstellungen speichern, um den Prozess zu automatisieren.

  • Automatisierung mit Outlook 365: Wenn Du Outlook 365 verwendest, kannst Du die Automatisierung auch über Power Automate in Betracht ziehen, um E-Mails automatisch zu archivieren.

  • Batch-Verarbeitung: Überlege, mehrere E-Mails gleichzeitig zu speichern, indem Du eine Schleife über die Auswahl in Outlook erstellst.


FAQ: Häufige Fragen

1. Wie speichere ich E-Mails in einen bestimmten Ordner?
Du kannst den Pfad in dem VBA-Code anpassen, um die E-Mails in einen bestimmten Ordner zu speichern.

2. Was passiert mit den Anhängen?
Im Makro gibt es eine Abfrage, die fragt, ob die Anhänge ebenfalls gespeichert werden sollen. Wenn Du "Ja" wählst, werden sie im gleichen Verzeichnis wie die E-Mail gespeichert.

3. Kann ich das Makro anpassen, um andere Informationen hinzuzufügen?
Ja, Du kannst den Dateinamen im Makro anpassen, um weitere Informationen wie den Empfänger hinzuzufügen.

4. Funktioniert das Makro in allen Outlook-Versionen?
Das Beispiel wurde in Outlook 2013 (Office 15) getestet, sollte aber auch in neueren Versionen funktionieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige