以下从.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
应该这样做。
根据文档,flag 4
抑制了进度对话框,并将 16
迫使"是对所有"响应。
在较旧版本的Windows(我记得)中,"是所有"是"覆盖"响应,这似乎对我来说是正确的。
在Windows 8.1 Pro上的Word 2013 VBA中进行了测试。我用静态文件名检查了一下,而不是.Items
集合。