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-Key: 245951

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

Printed on: April 24, 2024 at 08:04 o'clock

Member: colinardo
colinardo Aug 08, 2014 updated at 09:50:50 (UTC)
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
Member: Dpole86
Dpole86 Aug 08, 2014 at 09:50:34 (UTC)
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
Member: colinardo
colinardo Aug 08, 2014 updated at 09:53:29 (UTC)
Goto Top
hatte einen kleinen Fehler in Zeile 10 meines Codes korrigiert, s.o.
Member: Dpole86
Dpole86 Aug 08, 2014 at 10:03:22 (UTC)
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
Member: colinardo
colinardo Aug 08, 2014 updated at 10:09:48 (UTC)
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 ....