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

Forumthread: E-Mails aus Outlook als .msg speichern

E-Mails aus Outlook als .msg speichern
10.09.2021 14:09:49
Patric
Hallo zusammen
Ich versuche mittels VBA sämtliche E-Mails aus einem Outlook-Ordner in einen bestimmten Datei-Explorer-Ordner als .msg zu speichern.
Beim Versuch, dies durchlaufen zu lassen, erhalte ich bei ".SaveAs FullPath" folgende Fehlermeldung:
"287 - Anwendungs- oder objektdefinierter Fehler"
Kann mir jemand weiterhelfen und sagen, was ich falsch mache?
Ich lade euch noch eine Excel-Datei dazu hoch.
https://www.herber.de/bbs/user/148001.xlsm
Besten Dank für eure Hilfe und einen schönen Tag.
Patric
Folgender Code verwende ich:

Sub MailSpeichern()
Dim olApp As Object
Dim olName As Object
Dim olFolder As Object
Dim olText As String
Dim olItems As Long
Dim Path As String, FullPath As String
Dim Mail As String, Ordner As String, Pfad As String
On Error GoTo Fehler
Mail = Range("C3") 'E-Mailadresse
Ordner = Range("C4")
Pfad = Range("C6")
Set olApp = CreateObject("Outlook.Application")
Set olName = olApp.GetNamespace("MAPI")
Set olFolder = olName.Session.Folders(Mail).Folders(Ordner)
For olItems = 1 To olFolder.Items.Count
Path = Pfad
With olFolder.Items.Item(olItems)
olText = Replace(.Subject, "´", "_")
olText = Replace(olText, "`", "_")
olText = Replace(olText, "'", "_")
olText = Replace(olText, "{", "(")
olText = Replace(olText, "[", "(")
olText = Replace(olText, "]", ")")
olText = Replace(olText, "}", ")")
olText = Replace(olText, "/", "-")
olText = Replace(olText, "", "-")
olText = Replace(olText, ":", "")
olText = Replace(olText, "*", "_")
olText = Replace(olText, "?", "")
olText = Replace(olText, """", "_")
olText = Replace(olText, "|", "_")
olText = Replace(olText, "", "_")
FullPath = Path & Format(.ReceivedTime, "YYYYDDMM") & "-" & Format(.ReceivedTime, "hhmm") & "_" & _
olText & "_" & .Sender & ".msg"
.SaveAs FullPath
End With
Next olItems
Exit Sub
Fehler:
'For Index = 1 To 500
Debug.Print Err.Number & " - " & Error & Chr(10) & FullPath 'Error$(Index)
'Next Index
End Sub



		
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: E-Mails aus Outlook als .msg speichern
10.09.2021 14:19:19
mumpel
Fullpath von was? Du musst den Pfad explizit angeben. "Fullpath" hast Du nicht deklariert und auch nicht gefüllt.
AW: E-Mails aus Outlook als .msg speichern
10.09.2021 14:26:34
Patric
Den FullPath habe ich zusammengesetzt, sowie der Path wird aus Range("C6") genommen. Beides ist als Dim ..... as String deklariert.

FullPath = Path & Format(.ReceivedTime, "YYYYDDMM") & "-" & Format(.ReceivedTime, "hhmm") & "_" & _
olText & "_" & .Sender & ".msg"

Muss ich hier etwas ändern?

Anzeige
Kleiner Hinweis
10.09.2021 14:25:42
mumpel
Im Übrigen sollte man Standardparamter nicht als Variable nutzen. Du sollest also für "Path" und "Fullpath" andere Variablennamen wählen.
AW: Kleiner Hinweis
10.09.2021 14:48:22
Patric
Danke mumpel für den Hinweis. Die Namen habe ich geändert.
Beides habe ich deklariert, erhalte immer noch die gleiche Fehlermeldung.

Sub MailSpeichern()
Dim olApp As Object
Dim olName As Object
Dim olFolder As Object
Dim olText As String
Dim olItems As Long
Dim OrdnerAdresse As String, GanzerPfad As String
Dim Mail As String, Ordner As String
Mail = "hans.muster@web.ch" 'Range("C3") 'E-Mailadresse
Ordner = "Inbox" 'Range("C4")
OrdnerAdresse = "C:\DOKUMENTE\E-Mail Outlook_Sicherung\Inbox\" 'Range("C6")
Set olApp = CreateObject("Outlook.Application")
Set olName = olApp.GetNamespace("MAPI")
Set olFolder = olName.Session.Folders(Mail).Folders(Ordner)
For olItems = 1 To olFolder.Items.Count
With olFolder.Items.Item(olItems)
olText = Replace(.Subject, "´", "_")
olText = Replace(olText, "`", "_")
olText = Replace(olText, "'", "_")
olText = Replace(olText, "{", "(")
olText = Replace(olText, "[", "(")
olText = Replace(olText, "]", ")")
olText = Replace(olText, "}", ")")
olText = Replace(olText, "/", "-")
olText = Replace(olText, "", "-")
olText = Replace(olText, ":", "")
olText = Replace(olText, "*", "_")
olText = Replace(olText, "?", "")
olText = Replace(olText, """", "_")
olText = Replace(olText, "|", "_")
olText = Replace(olText, "", "_")
GanzerPfad = OrdnerAdresse & Format(.ReceivedTime, "YYYYDDMM") & "-" & Format(.ReceivedTime, "hhmm") & "_" & olText & "_" & .Sender & ".msg"
.SaveAs GanzerPfad
End With
Next olItems
End Sub


Anzeige
AW: Kleiner Hinweis
10.09.2021 15:14:57
mumpel
Da fehlt ein Pfadtrenner. GanzerPfad = OrdnerAdresse & "\" & Format....
AW: Kleiner Hinweis
10.09.2021 15:41:21
Patric
Leider ist das nicht der Fehler. Der Pfadtrenner wurde bereits hier hinzugefügt:

OrdnerAdresse = "C:\DOKUMENTE\E-Mail Outlook_Sicherung\Inbox\"

Hast du evtl. noch einen weiteren Tipp?

Anzeige
AW: Kleiner Hinweis
10.09.2021 17:46:04
Luschi
Hallo Patric,
Du solltest per Vba natürlich auch überprüfen, ob der Pfad tatsächlich existiert:

If Dir(OrdnerAdresse, vbNormal) = "" Then
MsgBox "Pfad '" & OrdnerAdresse & "' existiert nicht!", 16, "Programmende...."
Exit Sub
End If
Gruß von Luschi
aus klein-Paris
Anzeige
Danke für die Hilfe - funktioniert
11.09.2021 20:06:17
Patric
Guten Abend Luschi
Genau hier war das Problem. Ich habe es ursprünglich auf einem Geschäfts-PC versucht (die OrdnerAdresse muss etwas anders als als zuhause zusammengestellt werden), zuhause klappt alles wunderbar.
Besten Dank und Grüsse nach klein-Paris
Patric
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

E-Mails aus Outlook als .msg speichern


Schritt-für-Schritt-Anleitung

Um E-Mails aus Outlook als .msg zu speichern, kannst du das folgende VBA-Skript verwenden. Dieses Skript speichert alle E-Mails aus einem bestimmten Outlook-Ordner in einen ausgewählten Datei-Explorer-Ordner.

  1. Öffne Outlook und den Visual Basic for Applications (VBA) Editor.

    • Drücke ALT + F11.
  2. Erstelle ein neues Modul.

    • Klicke auf Einfügen > Modul.
  3. Füge den folgenden Code in das Modul ein:

    Sub MailSpeichern()
       Dim olApp As Object
       Dim olName As Object
       Dim olFolder As Object
       Dim olText As String
       Dim olItems As Long
       Dim OrdnerAdresse As String, GanzerPfad As String
       Dim Mail As String, Ordner As String
    
       Mail = "deine.email@beispiel.com" ' Deine E-Mailadresse
       Ordner = "Inbox" ' Der Ordner, aus dem die Mails gespeichert werden
       OrdnerAdresse = "C:\Pfad\zu\deinem\Ordner\" ' Der Speicherort auf deinem PC
    
       Set olApp = CreateObject("Outlook.Application")
       Set olName = olApp.GetNamespace("MAPI")
       Set olFolder = olName.Session.Folders(Mail).Folders(Ordner)
    
       For olItems = 1 To olFolder.Items.Count
           With olFolder.Items.Item(olItems)
               olText = Replace(.Subject, "´", "_")
               ' Weitere Ersetzungen hier...
               GanzerPfad = OrdnerAdresse & Format(.ReceivedTime, "YYYYDDMM") & "-" & Format(.ReceivedTime, "hhmm") & "_" & olText & ".msg"
               .SaveAs GanzerPfad
           End With
       Next olItems
    End Sub
  4. Passe die Variablen Mail, Ordner und OrdnerAdresse an deine Bedürfnisse an.

  5. Führe das Skript aus.

    • Drücke F5, um das Skript zu starten.

Häufige Fehler und Lösungen

  • Fehlermeldung "287 - Anwendungs- oder objektdefinierter Fehler":

    • Stelle sicher, dass der Pfad, den du in OrdnerAdresse angegeben hast, existiert. Verwende den folgenden Code, um dies zu überprüfen:
    If Dir(OrdnerAdresse, vbNormal) = "" Then
        MsgBox "Pfad '" & OrdnerAdresse & "' existiert nicht!", 16, "Programmende...."
        Exit Sub
    End If
  • Fehlender Pfadtrenner:

    • Achte darauf, dass du einen \ (Backslash) am Ende von OrdnerAdresse hinzugefügt hast.

Alternative Methoden

Wenn VBA für dich nicht in Frage kommt, kannst du auch manuell E-Mails aus Outlook speichern:

  1. Markiere die E-Mail, die du speichern möchtest.
  2. Klicke auf Datei > Speichern unter.
  3. Wähle den Speicherort und den Dateityp .msg aus.

Dies ist jedoch nicht ideal, wenn du mehrere E-Mails speichern möchtest.


Praktische Beispiele

Hier ist ein Beispiel, um mehrere Mails von Outlook auf PC zu speichern:

Sub MailsSpeichern()
    ' Ähnlicher Code wie oben, um mehrere Mails zu speichern.
End Sub

Du kannst den Code entsprechend anpassen, um spezifische Ordner oder E-Mails auszuwählen.


Tipps für Profis

  • Verwende eine Schleife, um mehrere Ordner zu durchlaufen: Wenn du E-Mails aus mehreren Ordnern speichern möchtest, kannst du eine zusätzliche Schleife einfügen.
  • Erweiterte Fehlerbehandlung: Implementiere mehr Fehlerbehandlungen, um Probleme beim Speichern der E-Mails besser zu diagnostizieren.

FAQ: Häufige Fragen

1. Wie speichere ich eine E-Mail als HTML? Du kannst den .SaveAs Befehl verwenden und den Dateityp .html angeben:

.SaveAs "C:\Pfad\zu\deinem\Ordner\email.html", 5 ' 5 steht für HTML

2. Wie kann ich bestimmte E-Mails filtern? Du kannst Bedingungen innerhalb der Schleife hinzufügen, um nur E-Mails mit bestimmten Kriterien zu speichern, wie z.B. nur E-Mails von einem bestimmten Absender.

3. Kann ich das Skript für Outlook 365 verwenden? Ja, das Skript funktioniert auch in neueren Versionen wie Outlook 365, solange die VBA-Funktionen unterstützt werden.

4. Was mache ich, wenn ich die E-Mails nicht im gewünschten Format speichern kann? Überprüfe die Dateipfade und stelle sicher, dass du die richtigen Dateiformate im SaveAs Befehl verwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige