У меня есть следующее, что в настоящее время извлекает .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
Я все еще получаю файл уже существует ошибка. Почти похоже на то, что он даже не дошел до того, что Windows попросит перезаписать файл и вместо этого провалится в коде, потому что он уже существует. – Josh
Отвлекаясь от вашей мысли, я прокомментировал раздел, который переименовал файл, а затем удалит оригинал. Это правильно перезаписывает файл, поэтому я могу перейти оттуда. Благодаря! – Josh
Вы уверены, что этот код будет работать? Приложение не имеет свойства или функции с именем Namespace. Функция GetNamespace допускает только «MAPI». Объект Outlook не имеет метода CopyHere. –