vba - 如何覆盖从磁盘上的 zip 中提取的文件?

标签 vba outlook attachment

下面从一个.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/

相关文章:

android - 通过 GMailSender 发送带附件的电子邮件?

Android:正确下载/保存电子邮件附件

arrays - 如果匹配多个相同的数据,如何循环?

macos - 为 Mac 开发 Outlook 插件

VBA 过滤表并将结果列的子集复制到剪贴板

outlook - 各种 Ews/Outlook 项目的文件扩展名是什么?

outlook - 从 Outlook 发送到 Gmail 时为 HTML 电子邮件添加的额外空间

带有多个附件的电子邮件

Excel VBA : "Like" Incorrectly Returns True and False with Chr 35

ms-access - 如何执行VBA Access模块​​?