dpole86
Goto Top

Outlook Attachments....nicht alle werden gespeichert

Hallo zusammen

ich versuche mich gerade in VBA.

Allerdings habe ich das Problem das nicht alle Attachments gespeichert werden.
Duplicate werden einfach ausgelassen

Mein Code

Public Sub saveAttachtoDisk(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
Dim dateFormat
dateFormat = Format(Now, "yyyy-mm-dd H-mm")  
If Dir("C:\Temp", vbDirectory) = "" Then  
  MkDir ("C:\Temp")  
Else
saveFolder = "c:\temp\"  
     For Each objAtt In itm.Attachments
          objAtt.SaveAsFile saveFolder & "\" & dateFormat & "-" & objAtt.DisplayName  
          Set objAtt = Nothing
     Next
End If
End Sub

Was mache ich falsch? bzw was fehlt mir den damit der Code Funktioniert?

Content-ID: 245951

Url: https://administrator.de/contentid/245951

Ausgedruckt am: 25.11.2024 um 03:11 Uhr

colinardo
colinardo 08.08.2014 aktualisiert um 11:50:50 Uhr
Goto Top
Zitat von @Dpole86:
Duplicate werden einfach ausgelassen
Was mache ich falsch? bzw was fehlt mir den damit der Code Funktioniert?
irgendwie logisch das wenn eine Datei schon im Dateisystem existiert, diese nicht erneut von der SaveAsFile-Funktion unter dem gleichen Namen abgespeichert werden kann. Das musst du voher überprüfen und gegebenenfalls einen neuen Namen dafür generieren bzw. einfach eine Nummer anhängen. z.B. so:

..
...
....
dim fso
set fso = CreateObject("Scripting.FilesystemObject")  
For Each objAtt In itm.Attachments
   filename =  saveFolder & "\" & dateFormat & "-" & objAtt.Filename  
   number = 1
   while fso.FileExists(filename)
      filename =  saveFolder & "\" & dateFormat & "-" & fso.GetBasename(objAtt.Filename) & "(" & number & ")." & fso.GetExtensionName(objAtt.Filename)  
      number = number + 1
   Wend
   objAtt.SaveAsFile filename
   Set objAtt = Nothing
Next
Grüße Uwe

11:50 : -edit- Fehler in Zeile 10 korrigiert
Dpole86
Dpole86 08.08.2014 um 11:50:34 Uhr
Goto Top
Hi Uwe

Vielen Dank für deine Antwort face-smile

mein Code bringt jetzt einen Fehler

und sieht folgendermassen aus

 
Public Sub saveAttachtoDisk(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
Dim dateFormat
Dim fso

dateFormat = Format(Now, "yyyy-mm-dd H-mm")  
If Dir("C:\Temp", vbDirectory) = "" Then  
  MkDir ("C:\Temp")  
Else

saveFolder = "c:\temp\"  
Set fso = CreateObject("Scripting.FilesystemObject")  
     For Each objAtt In itm.Attachments
   FileName = saveFolder & "\" & dateFormat & "-" & objAtt.FileName  
   Number = 1
   While fso.FileExists(FileName)
      FileName = saveFolder & "\" & dateFormat & "-" & fso.GetBasename(objAtt.FileName) & "(" & Number & ")." & fso.GetExtensionName  
      Number = Number + 1
   Wend
   objAtt.SaveAsFile FileName
   Set objAtt = Nothing
   Next
End If
End Sub

ich denke ich habe was falsch gemacht
colinardo
colinardo 08.08.2014 aktualisiert um 11:53:29 Uhr
Goto Top
hatte einen kleinen Fehler in Zeile 10 meines Codes korrigiert, s.o.
Dpole86
Dpole86 08.08.2014 um 12:03:22 Uhr
Goto Top
Hey Ja das war es face-smile

noch eine Frage an dich Uwe.

wenn ich jetzt das Datum nicht vor, sondern hinter der Datei haben möchte,

Ok ich habs glaub verbockt ^^

Public Sub saveAttachtoDisk(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
Dim dateFormat
Dim fso

dateFormat = Format(Now, "yyyy-mm-dd H-mm")  
If Dir("C:\Temp", vbDirectory) = "" Then  
  MkDir ("C:\Temp")  
Else

saveFolder = "c:\temp\"  
Set fso = CreateObject("Scripting.FilesystemObject")  
     For Each objAtt In itm.Attachments
   FileName = saveFolder & "\" & dateFormat & "-" & objAtt.FileName  
   Number = 1
   While fso.FileExists(FileName)
      FileName = saveFolder & "\" & fso.GetBasename(objAtt.FileName) & dateFormat & "." & fso.GetExtensionName(objAtt.FileName)  
      Number = Number + 1
   Wend
   objAtt.SaveAsFile FileName
   Set objAtt = Nothing
   Next
End If
End Sub


Ich wollte das es so aussieht

briefkopf-212014-08-08 11-59.tif

Grüße Roman
colinardo
colinardo 08.08.2014 aktualisiert um 12:09:48 Uhr
Goto Top
einmal hier (in deinem Code Zeile 15)
filename =  saveFolder & "\" & fso.GetBasename(objAtt.Filename) & "-" & dateFormat & "." & fso.GetExtensionName(objAtt.Filename) 
und dann noch hier in der while-Schleife
filename =  saveFolder & "\" & fso.GetBasename(objAtt.Filename) & "-" & dateFormat & "(" & number & ")." & fso.GetExtensionName(objAtt.Filename) 

btw. mach in Zeile 12 noch bei
savefolder = "c:\Temp\"
den abschließenden Backslash weg ....