下面从一个.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
最佳答案
根据我的测试,将 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
集合。
关于vba - 如何覆盖从磁盘上的 zip 中提取的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42249226/