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