2017-02-15 3 views
3

Ich habe die folgende, die derzeit extrahiert eine .xls aus einer .zip und speichert sie dann mit einem neuen Namen in einem bestimmten VerzeichnisOutlook VBA Überschreiben auf Datei vorhandene Festplatte

Public Sub saveAttachmentZip(itm As Outlook.MailItem) 

Const saveFolder = "C:\Temp\" 
Const fileFolder = "C:\Report\" 

Dim objAtt As Outlook.Attachment 
Dim oApp As Object 
Dim dName As Variant 

For Each objAtt In itm.Attachments 
    dName = objAtt.DisplayName 
    objAtt.SaveAsFile saveFolder & dName 
    Set oApp = CreateObject("Shell.Application") 
    oApp.NameSpace("C:\Report\").CopyHere _ 
      oApp.NameSpace(saveFolder & dName).Items 
      Name fileFolder & "Report.xls" As fileFolder & "NewReport.xls" 
      Kill saveFolder & dName 
Next 

End Sub 

Mein einziges Problem ist, dass diese Werke einmal und dann scheitert aufgrund der Datei bereits vorhanden. Gibt es eine andere Art, wie ich es speichern muss, damit es die vorhandene Datei überschreibt?

Bonus Info

Ich habe auch die folgenden, die die gleiche Sache tut, aber für E-Mails, die nicht über eine gezippte Erweiterung und diese korrekt überschreibt die vorhandene Datei auf dem Datenträger

Public Sub saveAttach(itm As Outlook.MailItem) 

    Const fileFolder = "C:\Report\" 

    Dim objAtt As Outlook.Attachment 

    For Each objAtt In itm.Attachments 
     objAtt.SaveAsFile fileFolder & "\" & "OldReport.csv" 
     Set objAtt = Nothing 
    Next 

End Sub 

Antwort

3

basierend auf meinen Tests sollte es tun die CopyHere zu

oApp.NameSpace("C:\Report\").CopyHere _ 
     oApp.NameSpace(saveFolder & dName).Items, _ 
     4 + 16 

ändern.

Pro the docs unterdrückt das Flag 4 den Fortschrittsdialog und das Flag 16 erzwingt die Antwort "Ja für alle".

In älteren Versionen von Windows (wie ich mich erinnere), war "Ja zu allen" die "Überschreiben" Antwort, und das scheint für mich zu gelten.

Getestet in Word 2013 VBA unter Windows 8.1 Pro. Ich habe dies mit statischen Dateinamen überprüft, nicht mit der .Items Sammlung.

+0

Ich bekomme immer noch eine Datei existiert bereits Fehler. Es scheint fast so, als würde es nicht einmal an den Punkt kommen, an dem Windows die Datei überschreiben und stattdessen den Code versagen würde, weil es bereits existiert. – Josh

+2

Von Ihrer Gedankenlinie weggegangen, habe ich den Abschnitt auskommentiert, der die Datei umbenannte und dann das Original löscht. Dies überschreibt die Datei korrekt, so dass ich von dort fortfahren kann. Vielen Dank! – Josh

+0

Sind Sie sicher, dass dieser Code überhaupt ausgeführt wird? Anwendung hat keine Eigenschaft oder Funktion namens Namespace. Die GetNamespace-Funktion lässt nur "MAPI" als sein Argument zu. Kein Outlook-Objekt verfügt über die CopyHere-Methode. –

Verwandte Themen