frageantwort

Bezug auf: Outlook Anlage speichern und umbenennen Betreffzeile VBA

Hallo liebes Forum,

ich möchte bitte noch einmal Bezug auf diesen Thread von Richter nehmen Outlook Anlage speichern und umbenennen Betreffzeile VBA
Ich habe seinen Erstcode übernommen welcher auch erfolgreich durchläuft und alle Attachments mit Urspüngsnamen abspeichert.
Auch mein Wunsch ist es die zu speichernden Dateien, i.d.R .jpg Dateien, mit der Betreffzeile der Mail im neuen Dateinamen zu versehen.

Im Thread macht hierzu "143728 (Level 1)" den Hinweis "dateiname = olitem.Subject & ".pdf" . Eigentlich sollte dies leicht in den Code einzupflegen sein. Mir gelingt dies leider nach langen Versuchen überhaupt nicht und bitte Euch mir bitte mitzuteilen wo ich in diesem Code die notwendigen Änderungen vornehmen muss.

Ich führe hier noch einmal den Code von "Richter" an:

Sub Anlagen_speichern()

    'HIER DEN PFAD ÄNDERN ! ! !  
    Const fcPath As String = "C:\Users\xxx"  
    
    Dim olExplorer As Explorer
    Dim olFolder As MAPIFolder
    Dim olSelection As Selection
    Dim olitem As MailItem
    Dim lngAttCount As Long
    Dim i As Long
    Dim Anzahl As Long
    Dim fcZahl As Integer
    Dim fcName As String
    Dim fcEndung As String
    Dim dateiname As String
    
    Set olExplorer = Application.ActiveExplorer
    Set olFolder = Application.ActiveExplorer.CurrentFolder
    Anzahl = 0
    
    If Dir(fcPath, vbDirectory) <> "" Then  
        If olFolder.DefaultItemType = olMailItem Then
            Set olSelection = olExplorer.Selection
            
            'Für jede Email die Makiert ist  
            For Each olitem In olSelection
                lngAttCount = olitem.Attachments.Count
                
                'Falls es anhänge gibt  
                If lngAttCount > 0 Then
                    
                    'Für jeden Anhang  
                    For i = lngAttCount To 1 Step -1
                        
                        With olitem.Attachments.Item(i)
                            
                            'Falls Datei schon existiert einfach zahl hinter hängen  
                            If CreateObject("Scripting.FileSystemObject").FileExists(fcPath & "\" & .FileName) Then  
                                'Datei existiert schon -> Zahl hochzählen bis noch nicht existiert  
                                fcZahl = 2
                                fcName = CreateObject("Scripting.FileSystemObject").GetBaseName(fcPath & "\" & .FileName)  
                                fcEndung = CreateObject("Scripting.FileSystemObject").GetExtensionName(fcPath & "\" & .FileName)  
                                While CreateObject("Scripting.FileSystemObject").FileExists(fcPath & "\" & fcName & "(" & CStr(fcZahl) & ")." & fcEndung)  
                                    fcZahl = fcZahl + 1
                                Wend
                                dateiname = fcName & "(" & CStr(fcZahl) & ")." & fcEndung  
                            Else
                                'Datei existiert noch nicht  
                                dateiname = .FileName
                            End If
                            
                            'Datei speichern  
                            .SaveAsFile fcPath & "\" & dateiname  
                            
                        End With
                        Anzahl = Anzahl + 1
                    Next i
                    
                End If
            
            Next olitem
            
        Else
            MsgBox "In diesem Ordner befinden sich keine E-Mail-Nachrichten."  
        End If
        If Anzahl < 1 Then
            MsgBox "Keine Anlagen vorhanden"  
        Else
            If Anzahl < 2 Then
                MsgBox Anzahl & " Anlage gespeichert"  
            Else
                MsgBox Anzahl & " Anlagen gespeichert"  
            End If
        End If
    Else
        MsgBox "Der im Makro zum speichern der Anhänge eingetragene Pfad ""fcPath"" existiert nicht!"  
    End If

End Sub

Vielen Dank, Martin
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 644596

Url: https://administrator.de/forum/bezug-auf-outlook-anlage-speichern-und-umbenennen-betreffzeile-vba-644596.html

Ausgedruckt am: 22.05.2025 um 06:05 Uhr

beidermachtvongreyscull
beidermachtvongreyscull 25.01.2021 um 13:10:16 Uhr
Goto Top
Hallo Martin,

ich rate davon ab.

Du darfst nicht vergessen, dass das Dateisystem nebst Anwendungen gewisse Pfadlängen (Pfad + Dateiname) per Standard nicht überschreitet.

In Abhängigkeit zum OS kann man die Beschränkung zwar aufheben, aber dennoch hast Du ggf. das Problem, dass im Betreff Zeichen vorkommen können, die im Dateisystem bzw. im Dateinamen nicht erlaubt sind.

https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file
https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path- ...

Gruß
Andreas
frageantwort
frageantwort 25.01.2021 um 16:52:56 Uhr
Goto Top
Ja Andreas, das habe ich in diesem ehemaligen Thread auch gelesen. Dennoch bitte ich darum mir den Hinweis zu geben wie und wo ich den Code verändern muss. Ich habe mich zu lange mit der Lösung dieses "Problems" beschäftigt um nun einfach die "Flinte" ins Korn zu werfen. Besten Dank!
beidermachtvongreyscull
beidermachtvongreyscull 25.01.2021 um 17:37:50 Uhr
Goto Top
Ändere Zeile 47 so:

dateiname = CStr(olitem.Subject) & fcName & "(" & CStr(fcZahl) & ")." & fcEndung  

Ändere Zeile 50 so:

dateiname = CStr(olitem.Subject) & .FileName

Das sollte die Speicherung, wie Du es möchtest.
Allerdings greift das nicht für die Prüfung.
frageantwort
frageantwort 25.01.2021 um 18:33:34 Uhr
Goto Top
Danke für die Hilfe Andreas, es ist fast perfekt und Du hast natürlich Recht mit den Beschränkungen und Zeichen.
So läuft der Skript mit den "störungsfreien" Mails reibungslos durch, jedoch leider nicht da im Ordner wo er soll. Hier kommt ein Laufzeitfehler mit dem Hinweis "Die Anlage kann nicht gespeichert werden. Datei- oder Ordnername ist ungültig." und Debugger steht in Zeile 54 bei ".SaveAsFile fcPath & "\" & Dateiname"

Deshalb bitte ich Dich nochmals um Deine Hilfe.
Der Betreff der Mails mit stets einem Bild als Anhang lautete "Jan 25 2021 16:15:03, Cam-5" das Attachment sieht meist wie folgt aus "PICT0325.jpg". Die Zahlen variiren. Ich vermute, dass im Betreff das Komma die Ursasche für das nicht Abspeichern ist. Was nach dem Komma kommt wäre mir egal. Wenn der "Jan" noch in 01 umwandelbar wäre = topp. Wenn nicht egal. Ich verarbeite die Daten weiter in Excel und daher wäre es super wenn alles klappen würde.
Herzlichen Dank!
beidermachtvongreyscull
beidermachtvongreyscull 25.01.2021, aktualisiert am 27.01.2021 um 09:37:28 Uhr
Goto Top
Es liegt an den Doppelpunkten im Betreff.

Zeile 47:
dateiname = Replace(CStr(olitem.Subject),":","-",vbTextCompare) & fcName & "(" & CStr(fcZahl) & ")." & fcEndung  

Zeile 50:
dateiname = Replace(CStr(olitem.Subject),":","-",vbTextCompare) & .FileName  

Das sollte die Doppelpunkte durch Bindestriche ersetzen.
Bedenke dass folgende Zeichen im Filesystem nicht erlaubt sind, da reserviert: : / \ * ? " < > |

Falls im Betreff die "" tatsächlich drin sind, sollten wir Deinen Code etwas umbauen.
frageantwort
frageantwort 27.01.2021 aktualisiert um 09:35:39 Uhr
Goto Top
Großartig Andreas, Du hast mir sehr geholfen. Vielen Dank, es klappt wunderbar. Damit komme ich zurecht und ich denke, dass ich so in Excel weiter kommen werde - Super!!
beidermachtvongreyscull
beidermachtvongreyscull 27.01.2021 um 09:36:47 Uhr
Goto Top
Supi!

Setz das Ding bitte noch auf "gelöst"!