Nur bestimmte Anhänge speichern
Hallo Allerseites,
ich bastel gerade an einem Script herum, um nur bestimmte Mailanhänge im Dateisystem abzuspeichern.
Lasse ich die Einschränkung weg funktioniert alles tadellos. Versuche ich allerdings den Dateityp der Anlage auf pdf zu reduzieren (and LCase(Right(Item.FileName, 4)) = ".pdf") komme ich über einen Laufzeitfehler 91 nicht hinaus ... Objekt oder Withblockvariable nicht definiert.
Danke für Eure Hilfe.
Gruß Mephisti
[Edit Biber] Codeformatierung [/Edit]
ich bastel gerade an einem Script herum, um nur bestimmte Mailanhänge im Dateisystem abzuspeichern.
Lasse ich die Einschränkung weg funktioniert alles tadellos. Versuche ich allerdings den Dateityp der Anlage auf pdf zu reduzieren (and LCase(Right(Item.FileName, 4)) = ".pdf") komme ich über einen Laufzeitfehler 91 nicht hinaus ... Objekt oder Withblockvariable nicht definiert.
Danke für Eure Hilfe.
Gruß Mephisti
Private Sub myOlItems_ItemAdd(ByVal Item As Object)
Const sPfad As String = "C:\Daten\Outlook-Anhang"
Dim iAttachCnt As Integer
Dim i As Integer
Dim myItem As Outlook.MailItem
Dim DateFolderPath As String
Dim fso As Object
DateFolderPath = sPfad & "\" & Format(Date, "dd-mm-yyyy")
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(sPfad) Then
fso.CreateFolder sPfad
End If
If Not fso.FolderExists(DateFolderPath) Then
fso.CreateFolder DateFolderPath
End If
If TypeName(Item) = "MailItem" Then
With Item.Attachments
iAttachCnt = .Count
If iAttachCnt > 0 Then
'For i = 1 To iAttachCnt then <--- Mit dieser Variante werden alle Anlagen abgespeichert, ist aber nicht Ziel
For i = 1 To iAttachCnt and LCase(Right(Item.FileName, 4)) = ".pdf" Then <--- Hier kommt der Laufzeitfehler 91
.Item(i).SaveAsFile DateFolderPath & "\" & .Item(i).FileName
Next i
End If
End With
End If
End Sub
[Edit Biber] Codeformatierung [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 161679
Url: https://administrator.de/forum/nur-bestimmte-anhaenge-speichern-161679.html
Ausgedruckt am: 22.04.2025 um 03:04 Uhr
5 Kommentare
Neuester Kommentar
Hallo Mephisti!
Das ließe sich etwas kompakter formulieren (und schöner posten
):
Alternativ sollte auch
funktionieren - das Testen muss ich allerdings Dir überlassen ... 
Grüße
bastla
Das ließe sich etwas kompakter formulieren (und schöner posten
...
If TypeName(Item) = "MailItem" Then
With Item.Attachments
For i = 1 To .Count 'wenn .Count < 1 wird die Schleife ohnehin übersprungen
If LCase(Right(.Item(i).FileName, 4)) = ".pdf" Then .Item(i).SaveAsFile DateFolderPath & "\" & .Item(i).FileName
Next
End With
End If
...
If TypeName(Item) = "MailItem" Then
For Each Attach In Item.Attachments
File = Attach.FileName
If LCase(Right(File, 4)) = ".pdf" Then Attach.SaveAsFile DateFolderPath & "\" & File
Next
End If
Grüße
bastla
Moin Mephisti,
wenn es etwas gibt, was ich noch mehr hasse als Montage...
-> Dann sind es Montags-Beiträge mit Programmschnipseln ohne Codeformatierung.
Dein Fauxpas in diesem Codefragment:
[Ebenfalls ungetestet]
Grüße
Biber
[Edit] Montags bin ich immer vieeeel zu langsam....[/Edit]
wenn es etwas gibt, was ich noch mehr hasse als Montage...
-> Dann sind es Montags-Beiträge mit Programmschnipseln ohne Codeformatierung.
Dein Fauxpas in diesem Codefragment:
- Du hast doch schon in Zeile 22 gesagt "With Item.Attachment"
- In der FOR i=1 TO... -Konstruktion sprichst du aber nicht ".(i).FileName" (==Item.Attachment(i).Filename) an, sondern ein "Item.Filename". Das gibt es aber nicht.
- Also ersetze "LCase(Right(Item.(i).FileName, 4))" durch "LCase(Right(.(i).FileName, 4))".
[Ebenfalls ungetestet]
Grüße
Biber
[Edit] Montags bin ich immer vieeeel zu langsam....[/Edit]