Outlook VBA覆盖磁盘上的现有文件

时间:2017-02-15 12:18:57

标签: vba outlook outlook-vba

我有以下内容,当前从.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

1 个答案:

答案 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集合。