2017-02-15 18 views
3

У меня есть следующее, что в настоящее время извлекает .xls из .zip, а затем сохраняет его с новым именем в указанной директорииПерспективы VBA перезаписи существующих файлов на диске

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 

Моя единственная проблема в том, что это работает один раз, а затем сбой из-за уже существующего файла. Есть ли другой способ сохранить его, чтобы он мог перезаписать существующий файл?

Bonus Информация

У меня также есть следующее, который делает то же самое, но для электронной почты, которые не имеют архивное расширение, и это один правильно перезаписывает существующий файл на диске

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 

ответ

3

Основываясь на моих тестах, изменение CopyHere к

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

должны это сделать.

По the docs, флаг 4 подавляет диалог хода и флаг 16 отдает ответы «Да всем».

В старых версиях Windows (как я помню) «Да для всех» был «перезаписывать» ответ, и это, похоже, остается верным для меня.

Протестировано в Word 2013 VBA на Windows 8.1 Pro. Я проверил это со статическими именами файлов, а не с коллекцией .Items.

+0

Я все еще получаю файл уже существует ошибка. Почти похоже на то, что он даже не дошел до того, что Windows попросит перезаписать файл и вместо этого провалится в коде, потому что он уже существует. – Josh

+2

Отвлекаясь от вашей мысли, я прокомментировал раздел, который переименовал файл, а затем удалит оригинал. Это правильно перезаписывает файл, поэтому я могу перейти оттуда. Благодаря! – Josh

+0

Вы уверены, что этот код будет работать? Приложение не имеет свойства или функции с именем Namespace. Функция GetNamespace допускает только «MAPI». Объект Outlook не имеет метода CopyHere. –