Outlook-Anhänge automatisch speichern – #ordnungmusssein


Bei Ihnen trudeln haufenweise E-Mails ein, deren Anhänge Sie dann ablegen müssen – und zwar jedes Mal in den gleichen Ordner?

Das lässt sich automatisieren. Mit ein bisschen VBA – nicht erschrecken, ich zeig Ihnen, wie Sie das einrichten:

Öffnen Sie den VBA-Editor in Outlook (dazu drücken Sie die Tastenkombination Alt+F11).

Fügen Sie ein neues Modul hinzu. Dazu klicken Sie im Projekt-Explorer, den Sie links im Fenster finden, mit der rechten Maustaste auf den Eintrag Projekt1, wählen dann Einfügen und dann Modul.

In das große leere Feld rechts fügen Sie nun Folgendes ein:

Public Sub Anhaenge_handeln(myItem As Outlook.MailItem)
Dim mAtts As Attachments
Dim mAtt As Attachment
    Set mAtts = myItem.Attachments
    While mAtts.Count > 0
        Set mAtt = mAtts(1)
        mAtt.SaveAsFile "C:\meinSpeicherort\" & mAtt.DisplayName
        mAtts.Remove 1
    Wend
End Sub

Ersetzen Sie darin C:\meinSpeicherort durch das Verzeichnis, in das Sie die Anhänge speichern wollen. Speichern Sie – durch Klick auf die Diskette (wie altmodisch!) oder mit der Tastenkombination Strg+S.

Schließen Sie den VBA-Editor.

Öffnen Sie den Regel-Manager mit START > Verschieben > Regeln > Regeln und Benachrichtigungen verwalten … und klicken Sie auf Neue Regel. Im Regel-Assistent klicken Sie im Feld 1. Schritt auf Regel ohne Vorlage erstellen > Regel auf von mir empfangene Nachrichten anwenden, und dann auf Weiter >.

Nun bestimmen Sie die Bedingung, unter der Sie die automatische Anhangspeicherung vornehmen wollen (z.B. alle Mails von einem bestimmten Empfänger, mit einem bestimmten Schlüsselwort, …). Weiter >.

Unter 1. Schritt: Aktionen auswählen haken Sie nun ein Skript ausführen an (dazu müssen Sie eventuell ein bisschen hinunterscrollen), dann klicken Sie auf den unterstrichenen Text ein Skript, und jetzt wählen Sie in der Skriptliste Anhaenge_handeln aus. Ok. Weiter >. Weiter >. Fertigstellen.

OTipp Regel Anhänge

Viel Freude mit der neuen Automatik!

Über katharinakanns

Microsoft Office Master Specialist mit viel Verständnis für IHR Geschäft - ich analysiere IHRE Situation, optimiere IHRE Prozesse, automatisiere IHRE Routineaufgaben, finde IHRE Lösung, unterrichte IHRE MitarbeiterInnen, mache Vorlagen mit IHRER CI, spare IHRE Zeit und IHR Geld. Ich freue mich darauf, SIE kennenlernen zu dürfen :-) Profilfoto: Miriam blitzt - Miriam Mehlman Fotografie - www.miriammehlman.at
Dieser Beitrag wurde unter Outlook, VBA abgelegt und mit , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

166 Antworten zu Outlook-Anhänge automatisch speichern – #ordnungmusssein

  1. Hermann Maier schreibt:

    Hallo Karin,
    ich finde den Blog super. Attachements + Emails strukturiert in generierten Unterverzeichnissen abzulegen ist für uns in Projekten sehr wichtig. Eine schlanke Lösung (bzw. in Kombination mit Regeln) wie hier bevorzuge ich aber.
    Folgender Wunschablauf:
    -) Ablage von Attachements in ein Zielverzeichnis mit generiertem Unterverzeichnis (Format: yyyymmdd_Betreff_Absender\); Bei Betreff wäre gut limitieren zu können 😉 (z.B. 20 Zeichen)
    -) Email in das gleiche generierte Unterverzeichnis ablegen (Attachements abgetrennt , Emails als .msg oder .eml). Das Email kann aber den gleichen Namen wie das Unterverzeichnis haben (Datum_Betreff_Absender\).
    -) Falls gleiche Dateinamen bei den Attachments: zusätzliche Nummer oder Zeitstempel anhängen
    (aber die Lösung habe ich hier schon gesehen 🙂 ).
    Ich habe Dir auch schon eine Anfrage geschickt. Aber bis jetzt keine Antwort erhalten ;-).
    Danke & lg aus Graz
    Hermann

    Gefällt mir

  2. Hermann Maier schreibt:

    PPS: meinte natürlich Katharina, Karin war ein Freud’scher Verschreiber :-).

    Gefällt mir

  3. katharinakanns schreibt:

    🙂 Kein Problem, bei „Martha“ wär ich irritiert gewesen, „Karin“ bin ich gewöhnt 🙂
    Mail ist geschrieben. Danke fürs Erinnern. Es war zu viel los hier …

    Gefällt mir

  4. MB schreibt:

    funktioniert leider nicht mehr ab Outlook 2013. Gibt es hierfür eine Alternative? (Emails werden mit Regel in bestimmten Ordner verschoben und nur die Anhänge dieser Mails sollen abgespeichert werden

    Gefällt mir

    • katharinakanns schreibt:

      Hallo,
      wie zeigt sich denn dieses „funktioniert nicht mehr“?
      Grundsätzlich klappt das auch in Version 2019 noch, es liegt also nicht ursächlich an der Version, wobei natürlich bei einer Versionsänderung manche Parameter verstellt werden (ärgerlicherweise).
      lg
      Katharina

      Gefällt mir

  5. Swen Knorst schreibt:

    Hallo, ich habe das Skript über den VBA Editor erstellt, wenn ich jetzt eine Regel erstellen will, erscheint mir unter dem 2. Aktion NICHT der Punkt mit dem Skript ausführen ?!??! Was tun ?
    Danke Swen

    Gefällt mir

  6. Ingo schreibt:

    Hallo Katharina,

    ich nutze Outlook 2016 in Office365 m. Exchange und habe versucht das Script über den Regelassistenten aufführen zu lassen.
    Die erste Hürde war in der Registry nötig, dort habe ich in HKCU „EnableUnsafeClientMailRules“ eingefügt, um die in Outlook 2016 verschwundene Aktion „Skript ausführen“ wieder im Regelassistenten sichtbar zu machen.
    Die neue Regel mit aktiviertem Skript läuft aber sie führt nichts aus, im lokalen Verzeichnis auf USB Datenträger wird nichts gespeichert.

    Wie kann ich prüfen woran es liegt, kann ich sehen wo das Skript hängt oder warum es nicht zur Speicherung von Anlangen kommt?

    Danke vorab 😉

    Gefällt mir

    • Jens schreibt:

      Hallo, gibt es hier schon eine Lösung?
      vielen Dank

      Gefällt mir

      • katharinakanns schreibt:

        Hallo Jens,
        das ist sehr schwer zu sagen – es könnten Makros wieder deaktiviert sein, die muss man zumeist bei jedem Neustart von Outlook zulassen (je nach Einstellung), es kann per Group Policy verunmöglicht worden sein, … Ferndiagnose geht da nicht mehr.
        Leider keine bessere Nachricht 😦
        herzliche Grüße

        Gefällt mir

  7. Florian M schreibt:

    Hallo Katharina,
    immer noch toller Blog – ich hab das jetzt so gelöst, da ich es auf Knopfdruck brauche und mir sonst die gleichen PDF’s überschrieben werden:

    Public Sub Anhaenge_handeln(myItem As Outlook.MailItem)
    Dim mAtts As Attachments
    Dim mAtt As Attachment

    Set mAtts = myItem.Attachments
    While mAtts.Count > 0
    Set mAtt = mAtts(1)

    mAtt.SaveAsFile „C:\meinOrdner\“ & Format(Now, „yyyymmdd hhmmss“) & Strings.Right(Strings.Format(Timer, „#0.00“), 2) & mAtt.DisplayName
    mAtts.Remove 1
    Wend
    End Sub

    aber die Schleife damit nur PDF’s reinlaufen, habe ich leider nicht hinbekommen.
    Kannst du mir da eve noch kurz helfen?

    ‚If Right(mAtt.DisplayName, 4) = „.pdf“ Then mAtt.SaveAsFile „C:\MeinOrdner\“ & mAtt.DisplayName“

    Gefällt mir

    • katharinakanns schreibt:

      Guten Morgen, Florian,
      danke für das Lob 🙂

      Mit dem Schnipsel hier werden nur pdfs „behandelt“ und auch nur pdfs gelöscht:

      Dim numAtt As Long
      numAtt = 1

      Set mAtts = myItem.Attachments
      While mAtts.Count > numAtt – 1
      Set mAtt = mAtts(numAtt)
      If LCase(Right(mAtt.DisplayName, 4)) = „.pdf“ Then
      mAtt.SaveAsFile „C:\“ & Format(Date, „yyyymmdd“) & „_“ & myItem.Sender & „_“ & Format(myItem.ReceivedTime, „yyyymmdd“) & „_“ & mAtt.DisplayName
      mAtt.Delete
      Else
      numAtt = numAtt + 1
      End If
      Wend

      Viel Erfolg!
      lg Katharina

      Gefällt mir

  8. SteffenM schreibt:

    Hallo Katharina,
    Ich hab dasselbe Problem wie Ingo (siehe Kommentar vom 07.01.2020)
    Das Problem mit der fehlenden Aktion „Skript ausführen“ hatte ich auch gelöst.
    Allerdings werden bei mir auch keine empfangenen Excel-Datei in einem vorgegebenen Ordner gespeichert.

    Vielen Dank schonmal für deine Rückmeldung

    Gefällt mir

  9. Nico schreibt:

    Hallo Katharina,

    vielen Dank für die guten Erklärungen, ich habe es nach deiner Anleitung umgesetzt und es tut auch was es soll.
    Allerdings habe ich ein weiterführendes Problem:
    Von manchen Kollegen kommt eine Mail mit mehreren Anhängen, die nach Möglichkeit alle in unterschiedliche Ordner sollten. Manche Anhänge davon sollen aber auch gar nicht erst gespeichert werden. Zudem müssten die Anhänge noch unter einem bestimmtem Namen, je nach Originalname abgespeichert werden.
    Ist das alles irgendwie machbar?

    Viele Grüße!
    Nico

    Gefällt mir

    • katharinakanns schreibt:

      Hallo Nico,
      das ist machbar – es stecken hier in den Kommentaren schon die richtigen Codeschnipsel zum Ausschließen bestimmter Dateien oder Dateiformate, und zur Unterscheidung für unterschiedliche Behandlungs“methoden“ – z.B. unterschiedliche Ordner.
      Wichtig ist dafür die Arbeit, bevor die Programmierung beginnt: eine genaue Definition, woran das Programm erkennen soll, was es tun soll.
      lg
      Katharina

      Gefällt mir

  10. Reinhard schreibt:

    Hallo Katharina !
    Ich habe schon vor einigen Jahren diese Applkation nutzen wollen, bin aber gescheitert (seither erhalte ich alle eure Korrespobndenz zu diesem Thema, habe aber damals das Problem anders gelöst). Jetzt ist das Problem wieder aktuell. Kein Problem das Madul zu erstellen und eine Regel zu erstellen. Aber in der Auswahl der Aktion die ausgeführt werden soll wird die Option „Skript ausführen“ nicht angezeigt (leider kann ich keinen screenshot des Bidschirms senden). Was kann ich tun ? Ich habe Win10, Windows365. vorher war es win8, win 7 und entsprechand anderes Office. Ich konnte es nie zum Laufen bringen…
    Danke für einen Hinweis

    Gefällt mir

    • katharinakanns schreibt:

      Hallo Reinhard,
      Lösungsvorschlag 1:
      Hast du im Fenster mit den möglichen Aktionen nach unten gescrollt? Der Eintrag „ein Skript ausführen“ ist auf den ersten Blick nicht ersichtlich.
      Lösungsvorschlag 2:
      Unter Optionen>TrustCenter>Einstellungen für das Trust Center>Makroeinstellungen die Sicherheitsstufe runtersetzen, da dein Makro vermutlich keine Signatur hat. Danach Outlook neu starten und es sollte funktionieren
      Lösungsvorschlag 3:
      Sonst wird es mühsam – da ist wahrscheinlich die Registry verhunzt. Sollzustand:
      Windows Registry Editor Version 5.00
      [HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Security]
      „EnableUnsafeClientMailRules“=dword:00000001

      und hier der Link zum Artikel bei Microsoft:
      https://answers.microsoft.com/en-us/msoffice/forum/msoffice_outlook-mso_win10/the-option-to-run-a-scritp-has-disappeared-from/d289e698-47fa-497a-80fa-633067a0de37#ThreadAnswers

      lg Katharina

      Gefällt mir

      • Reinhard schreibt:

        Danke. Die Vorschläge 1+2 haben erwartungsgemäß keinen Erfolg gehabt. Aber der Eintrag hat in der Registry gefehlt, ich habe ihn eingetragen und jetzt kann ich „ein Skript“ ausführen anklicken und das skript anwählen. Alles läuft wie versprochen und erwünscht. Danke.

        Gefällt mir

  11. Stephan schreibt:

    Prima das Script.
    Funktioniert einwandfrei.
    Dankeschön.
    Wir mußten nur die Makrosicherheit etwas runter schrauben.

    Gefällt mir

  12. Daniel schreibt:

    Hallo,

    ich versuche auch seit einer Weile diese Funktion zu hinterlegen aber irgendwie wird es nicht ausgeführt, also es kommt eine neue Email an, aber der Anhang wird nicht abgelegt.

    Gefällt mir

  13. Helmut schreibt:

    Sehr gute Bescheibung bzw Lösung… Läuft auch, allerdings werden die Datein immer überschrieben, denn jede Mail hat ein 3er Set Nilder von meiner HikVision Camera im Anhang.
    Eine Ablage nach Datum und Nummerierung 0 bis x würde ich mir wünschen.
    Wer kann absolutem Beginner helfen? 😉

    Gefällt mir

    • katharinakanns schreibt:

      Hallo,
      da muss die Zeile mit der Speicherung ein bisschen „aufgeblasen“ werden:
      mAtt.SaveAsFile „C:\meinSpeicherort\“ & Format$(date(), "yyyymmdd") & "_" & mAtts.Count & "_" & mAtt.DisplayName
      Jetzt kommt das aktuelle Daum dazu, und eine laufende Nummer (von 3 bis 1).
      lg
      Katharina

      Gefällt mir

  14. Philipp schreibt:

    Super Blog und tolle Erklärung. Gibt es denn auch die Möglichkeit das die Anhänge nicht von der entsprechenden E-Mail gelöscht werden sondern das diese dort weiter als Anhang weiterbestehen und diese zusätzlich in den entsprechenden Ordner gespeichert werden?

    Gefällt mir

    • katharinakanns schreibt:

      Statt
      While mAtts.Count > 0
      Set mAtt = mAtts(1)
      mAtt.SaveAsFile „C:\meinSpeicherort\“ & mAtt.DisplayName
      mAtts.Remove 1
      Wend

      sollte das klappen:

      Dim I as long
      For I = 1 to mAtts.Count
      Set mAtt = mAtts(I)
      mAtt.SaveAsFile „C:\meinSpeicherort\“ & mAtt.DisplayName
      Next I

      lg
      Katharina

      Gefällt mir

  15. Christoph schreibt:

    Hallo Katharina,

    ich habe nach deiner Anleitung das Script erstellt und es funktioniert wurderbar.
    Wie kann man erreichen, dass die Datei unter einem bestimmten Namen abgespeichert wird und die vorhandene Überschrieben?

    Vielen Dank!

    Gefällt mir

  16. Christian schreibt:

    Hallo Katharina,
    es geht zwar nicht direkt um dein Script hier, aber um eine Abwandlung.
    Bis 1.11. hat folgendes Script noch voll funktioniert:
    Public Sub Telekom_Anhang(olc As Outlook.MailItem)
    Dim attach As Attachment
    Dim Now As Variant
    Dim FileName As String
    Dim pfad As String
    Dim i As Integer
    pfad = „E:\Daten\TEXTE\privat\Telekom\“
    If olc.Attachments.Count > 0 Then
    For Each attach In olc.Attachments
    If Right(attach.FileName, 4) = „.pdf“ Then attach.SaveAsFile (pfad & Format(olc.ReceivedTime, „yyyy_mm_dd_“) & attach.FileName)
    Next attach
    End If
    End Sub
    Aufgerufen beim anlegen der Regel.

    Heute kam eine Mail, wo der Anhang hätte gespeichert werden müssen. Aber nix, keine Speicherung, auch nicht beim manuellen ausführen beim speichern der Regel.
    Kannst du helfen, wo der Fehler liegt?
    Es passiert nix, keine Fehlermeldung, keine Speicherung. Die Regel selber läuft aber durch.
    Vielen Dank!

    Christian

    Gefällt mir

    • katharinakanns schreibt:

      Hallo Christian,
      ich hab das jetzt einmal getestet, und (das willst du nicht hören, aber leider) bei mir funktioniert es, halt mit einem anderen Pfad. Du sagst, die Regel läuft durch, Hast du schon mal mit einem Breakpoint im Code versucht, zu schauen, ob das Sub wirklich gestartet wird?
      lg
      Katharina

      Gefällt mir

  17. Korbinian schreibt:

    Moin Katharina,
    besten Dank für die tolle Erklärung und auch die Mühe bei dauerhaften Sichten der Kommentare, sogar fünf Jahre nach Thread-Erstellung.
    Ich fürchte zwar die Antwort schon zu kennen, aber folgendes Problem habe ich: Da ich an einem Arbeitsrechner sitze, kann ich nicht auf die registry zugreifen, das müsste über den technischen Helpdesk laufen. Leider wird aber auch mir bei der Regelerstellung im zweiten Schritt „Skript ausführen“ nicht angezeigt. Gibt es einen Weg das ohne reg-Eintrag zu beheben? Die Makroeinstellungen im Trust-Center sind auf „alle Makros zulassen (nicht empfohlen)“ gesetzt, ich denke das ist schon die höchste Stufe.
    Lieben Dank und viele Grüße
    Korbinian

    Gefällt mir

    • katharinakanns schreibt:

      Oje,
      wenn das TrustCenter schon ausgereizt ist und die registry so nicht möglich, dann hilft wohl nur ein Appell an die IT, dass sie das zulässt (ist oft vergeblich, ich weiß).
      lg und danke für die Anerkennung – sowas freut mich 🙂
      Katharina

      Gefällt mir

  18. Stefan schreibt:

    Hallo Katharina
    Ich habe noch eine Frage zu deinem Code.
    Kann man auch nur die Anhänge von Mails in einem bestimmten Outlook Ordner automatisch speichern oder geht das nur vom Eingangsordner?
    Wir haben jeweils mehrere Projekte und möchten gerne jeweils die E-Mails in die Projektordner im Outlook ablegen und von da die Anhänge in die Projektordner im Ablagesystem speichern.
    Kannst du mit da weiterhelfen?
    LG Stefan

    Gefällt mir

    • katharinakanns schreibt:

      Hallo Stefan,
      hier wird das gerade markierte E-Mail „behandelt“, egal, in welchem Ordner es liegt.
      Da wäre also gar nichts zu tun, damit das funktioniert.

      Und bei der Variation mit „alle Mails durchsuchen“ muss halt der entsprechende Ordner eingegeben werden, oder – in deinem Fall – alle Projektordner durchlaufen werden.
      lg
      Katharina

      Gefällt mir

  19. Matrix1999 schreibt:

    Hallo Katharina!
    Könnte man so ein Skript auch für bestehende eMails umschreiben?
    Ich habe einen Postfach-Ordner, in dem bereits ganz viele eMails mit CSV Anhang liegen. Diese würde ich gerne mit einem Skript auf z.B. C:\OrdnerXYZ kopieren. Für alles weitere was dann kommt, würde ich das oder die Skript oben nutzen wollen.
    Danke im Voraus!
    Gruß
    Matthias

    Gefällt mir

    • katharinakanns schreibt:

      Hallo Matthias,
      das geht zum Beispiel mit
      Public Sub Inbox_Anhaenge_handeln()
      Dim myItem As Outlook.MailItem

      Dim olNameSpace As Outlook.NameSpace
      Dim olFolder As Outlook.Folder
      Dim olItems As Outlook.Items
      Set olNameSpace = GetNamespace(„MAPI“)
      Set olFolder = olNameSpace.GetDefaultFolder(olFolderInbox)
      Set olItems = olFolder.Items
      For Each myItem In olItems
      Call Anhaenge_haendeln(myItem) ‚!!! oder eine andere Prozedur – halt eine, die genau das tut, was du möchtest
      Next myItem
      Set myItem = Nothing
      Set olItems = Nothing
      Set olFolder = Nothing
      Set olNameSpace = Nothing
      End Sub

      !! Das hier durchläuft den Posteingang ohne Unterordner, und die Prozedur Anhaenge_haendeln aus dem Blogpost entfernt die Anhänge nach dem Ablegen. Wenn das anders aussehen soll (nur ein konkreter Ordner, nicht löschen, sondern nur ablegen, …) muss der Code adaptiert werden; Beispiele dazu sind zT ebenfalls hier zu finden.
      lg
      Katharina

      Gefällt mir

  20. Ramona Reuter schreibt:

    Hallo Katharina,
    lieben Dank für das Script.
    Eine Frage hätte ich (sie wurde auch bereits gestellt, ich habe in den Kommentaren leider keine Antwort gefunden, weswegen ich Dich „belästige“ 😉 ). Ist es möglich, den Dateinamen aus dem Betreff zu nehmen?
    Ich bekommen Bilder geschickt, wo im Betreff vermerkt ist, um welchen Kunden & welchen Auftrag es sich handelt. Da wäre es sehr hilfreich den Betreff auslesen zu können.
    Tante Google hat mir leider auch nicht wirklich weiterhelfen können.
    Wünsche Dir ein schönes Wochenende & liebe Grüße
    Ramona

    Gefällt mir

    • katharinakanns schreibt:

      Hallo Ramona,
      ha, das geht 🙂
      Der Betreff steht in dieser Eigenschaft:
      myItem.Subject
      und damit könnte die Zeile z.B. lauten:
      mAtt.SaveAsFile „C:\meinSpeicherort\“ & myItem.Subject & “ “ & mAtt.DisplayName
      Herzliche Grüße und ebenfalls ein schönes Wochenende!
      Katharina

      Gefällt mir

  21. Juergen schreibt:

    Hallo,
    ich hatte dieses Script seit Jahren im Einsatz, aber jetzt nach dem Umstieg auf office2019 habe ich auch diese Funktion „führe script aus“ in den Regeln nicht mehr.
    Der Eintrag in der Registry ist gemacht, aber der Punkt erscheint nicht mehr in der Auswahlliste.
    Echt schade.
    Irgendeine Idee?

    Gruß
    Jürgen

    Gefällt mir

  22. Klaus schreibt:

    Die Problemstellung war: Wie kann man eine Kolonne von ca. 1.200 personenbezogenen Daten, wo sowohl Vor-und Nachname, gefolgt auf die nächste Position, die bisher nur jeweils durch ein Leerzeichen getrennt waren, über die Word-Funktion „Ersetzen“ individuell mit Semikolon zu trennen, ohne die verbleibenden Leerzeichen anzusteuern.
    Frau Schwarz hat mir bei dieser Aufgabe schnell, unbürokratisch und visuell sehr geholfen. Und mir viel Aufwand erspart – vielen Dank dafür.

    Gefällt mir

Schreibe eine Antwort zu Christian Antwort abbrechen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s