Vba 使用静态名称保存和重命名Outlook附件

Vba 使用静态名称保存和重命名Outlook附件,vba,outlook,Vba,Outlook,我有一个代码,它将附件保存到特定位置,并将其重命名为“name.xls” 用户在此线程中使用.csv文件执行了非常类似的操作: 除了一个.xls文件,我做了同样的事情 我的脚本保存并重命名文件,但当我尝试打开文件时,它会说:“'name.xls'的格式与文件扩展名指定的格式不同。请验证它是否已损坏…” 一旦我点击Yes,它就会打开,所有的数据都是奇怪的符号。如果我将&'\name.xls'替换为'&objAtt.DisplayName',它将以原始名称正确保存文件 我仔细检查过这是一个.xls

我有一个代码,它将附件保存到特定位置,并将其重命名为“name.xls”

用户在此线程中使用.csv文件执行了非常类似的操作:

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

我的脚本保存并重命名文件,但当我尝试打开文件时,它会说:“'name.xls'的格式与文件扩展名指定的格式不同。请验证它是否已损坏…”

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


我仔细检查过这是一个.xls文件。找出更通用的东西(以便相同的脚本适用于.xls.xlsx和.xlsm)也会非常有帮助,但优先级不会太高。

如果有多个附件,您的代码可能会用其他附件之一替换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用例选择仅保存特定的文件类型请参阅
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