Da kam doch neulich in den Kommentaren der Wunsch auf, nicht nur #Anhänge von E-Mails zu speichern, sondern #Anhänge von #Anhängen. Geht das?
Ja. Ich hab die ursprüngliche Prozedur ein bisschen erweitert:
Public Sub Anhaenge_handeln_r(myItem As Outlook.MailItem) Dim myNameSpace As NameSpace Dim mAtts As Attachments Dim mAtt As Attachment Dim inAtt As Outlook.MailItem Set myNameSpace = GetNamespace("MAPI") Set mAtts = myItem.Attachments While mAtts.Count > 0 Set mAtt = mAtts(1) mAtt.SaveAsFile "D:\meinSpeicherort\" & mAtt.FileName If Right(mAtt.FileName, 4) = ".msg" Then Set inAtt = myNameSpace.OpenSharedItem("D:\meinSpeicherort\" & mAtt.FileName) Call Anhaenge_handeln_r(inAtt) Set inAtt = Nothing End If mAtts.Remove 1 Wend Set mAtt = Nothing Set mAtts = Nothing Set myNameSpace = Nothing End Sub
Und was geschieht da genau?
Die Anhänge werden gespeichert. Und wenn ein Anhang eine .msg-Datei ist, dann wird sie sodann geöffnet, und das Spiel beginnt von neuem. Die Prozedur ruft sich selbst auf, bis alle Anhänge abgearbeitet sind – das nennt man, wenn Sie ein Wort zum Angeben brauchen, Rekursion.
(Und wer genau schaut, sieht, dass ich – im Gegensatz zum Originalschnipsel – am Schluss die Objektvariablen ordentlich aufräume. So gehört sich das auch; ich hab nur damals keinen Wert drauf gelegt :-).)
Hallo Katharina,
vielen, vielen Dank für das Script. Nach einigem Basteln funktioniert ist jetzt bei mir. 🙂
Eine Frage: Die MSG-Datei aus der „zweiten Ebene“ wird bei mir ebenfalls gespeichert obwohl mich ja eigentlich nur die PDF-Datei interessiert. Kann man das evtl. noch irgendwie abstellen? Falls nicht, wäre es auch nicht wild. Ein paar Dateien löschen geht um einiges schneller als sich durch die ganzen Anhänge zu klicken. 🙂
Viele Grüße
Carsten
LikeLike
Hallo Carsten,
das lässt sich nicht verhindern; die .msg müssen erst einmal wo abgelegt sein, um weiter durchsucht werden zu können.
Was schon ginge: Nach der Zeile
Call Anhaenge_handeln_r(inAtt)
die Datei wieder löschen … also gibt’s demnächst einen Blogbeitrag zum Dateilöschen mit VBA 🙂
lg
Katharina
LikeGefällt 1 Person
Hallo Katharina,
alles klar, jetzt habe ich es verstanden. 🙂
Vielen Dank nochmal.
Viele Grüße
Carsten
LikeLike
Hallo Katharina,
auf einem PC mit Outlook 2016 (W10) funktioniert das Skript nicht, es passiert gar nichts.
Als Regelbedingung habe ich:
„Nach Erhalt einer Nachricht
mit einer Anlage
und nur auf diesem Computer
Projekt1.Anhaenge_handeln_r ausführen“
Pfad ist auf einen Ordner auf dem Desktop gesetzt.
Was kann ich noch tun, um den Fehler zu finden?
Viele Grüße,
Stefan
LikeLike
Hallo Stefan,
schau mal in den früheren Kommentaren – das Problem „es passiert nichts“ ist ein Berechtigungsproblem, und es gibt ein paar Lösungen, eine davon sollte dann auch bei dir funktionieren.
lg Katharina
LikeLike