我有以下内容,当前从.zip中提取.xls,然后使用新名称将其保存到指定目录中
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
我唯一的问题是,由于文件已经存在,因此一次运行然后失败。我需要保存不同的方式来覆盖现有文件吗?
奖金信息
我也有以下内容做同样的事情,但对于没有压缩扩展名的电子邮件,这个正确覆盖磁盘上的现有文件
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
答案 0 :(得分:3)
根据我的测试,将CopyHere
更改为
oApp.NameSpace("C:\Report\").CopyHere _
oApp.NameSpace(saveFolder & dName).Items, _
4 + 16
应该这样做。
根据the docs,标记4
会抑制进度对话框,并标记16
部队"是全部"响应。
在旧版本的Windows中(我记得),"是全部的"是"覆盖"回应,这似乎适合我。
在Windows 8.1 Pro上的Word 2013 VBA中测试。我使用静态文件名检查了这个,而不是使用.Items
集合。