【问题标题】:Saving and renaming an Outlook attachment with static name使用静态名称保存和重命名 Outlook 附件
【发布时间】:2017-04-26 16:17:26
【问题描述】:

我有这段代码可以将附件保存到特定位置并将其重命名为“name.xls”

Public Sub saveAttachtoDisk(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
saveFolder = "C:\Users\acheng\Desktop"
     For Each objAtt In itm.Attachments
          objAtt.SaveAsFile saveFolder & "\name.xls"
          Set objAtt = Nothing
     Next
End Sub

一位用户在此线程中使用 .csv 文件做了非常相似的事情:

VBA Outlook - Rename attachments and save to folder

我做了同样的事情,除了 .xls 文件。

我的脚本保存并重命名文件,但当我尝试打开文件时,它显示:“'name.xls' 的格式与文件扩展名指定的格式不同。请确认它没有损坏...”

一旦我点击是并打开,所有数据都以奇怪的符号表示。如果我将 & '\name.xls' 替换为 '& objAtt.DisplayName' ,它将使用原始名称正确保存文件。

我已经仔细检查了这是一个 .xls 文件。找出更通用的东西(以便相同的脚本适用于 .xls、.xlsx 和 .xlsm)也会非常有帮助,但不是那么重要。

【问题讨论】:

    标签: vba outlook


    【解决方案1】:

    如果有多个附件,您的代码可能会将 Excel 附件替换为其他附件之一。

    试试这样的,找出答案

    Public Sub saveAttachtoDisk(itm As Outlook.MailItem)
         Dim objAtt As Outlook.Attachment
         Dim saveFolder As String
         Dim i as Integer
    
         i=0
         saveFolder = "C:\Users\acheng\Desktop"
         For Each objAtt In itm.Attachments
              i = i + 1
              objAtt.SaveAsFile saveFolder & "\name" & i & ".xls"
              Set objAtt = Nothing
         Next
    End Sub
    

    您应该在此处添加一些验证。假设所有附件都是 Excel 文件是一个很大的风险。

    【讨论】:

    • 这成功了!问题是,虽然我假设电子邮件只有一个附件,但发件人的电子邮件签名中有一张小图片。该脚本首先将附件保存为 name.xls,然后用图片覆盖它。您所说的验证是什么意思,您将如何过滤它以使其仅下载 excel 文件附件?
    • @user7926636 用例选择仅保存特定文件类型见stackoverflow.com/a/43180639/4539709
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 2019-05-12
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    相关资源
    最近更新 更多