Vba 如何下载Excel文件的附件?

Vba 如何下载Excel文件的附件?,vba,outlook,email-attachments,Vba,Outlook,Email Attachments,我想从发送到特定文件夹的电子邮件中下载附件。我编写了一个VBA代码,并为进入该文件夹的电子邮件设置了规则 它们都是xlsx。几个月来一直在手动处理它们,而且总是同一个文件 下载附件时,它将其保存为“文件”类型,而不是xlsx。如果我打开它,那全是胡说八道 èIaèYÎYèYýª;ßëëë-zõëëëëëëëë-zëëëëëëëëë!8“w1uÒä” 公共子saveAttachtoDisk(itm作为Outlook.MailItem) Dim objAtt作为Outlook。附件 将文件夹设置为字

我想从发送到特定文件夹的电子邮件中下载附件。我编写了一个VBA代码,并为进入该文件夹的电子邮件设置了规则

它们都是xlsx。几个月来一直在手动处理它们,而且总是同一个文件

下载附件时,它将其保存为“文件”类型,而不是xlsx。如果我打开它,那全是胡说八道

èIaèYÎYèYýª;ßëëë-zõëëëëëëëë-zëëëëëëëëë!8“w1uÒä”

公共子saveAttachtoDisk(itm作为Outlook.MailItem)
Dim objAtt作为Outlook。附件
将文件夹设置为字符串
作为字符串的Dim strFileType
将DtString设置为字符串
像绳子一样模糊
Dim文件名为字符串
将完整路径变暗为字符串
saveFolder=“\\path\path\path\path\path\”
strFileType=“.xlsx”
DtString=格式(现在为(),“mm-dd”)
SName=itm.SenderName
文件名=DtString&“&&SName”
完整路径=保存文件夹和文件名
对于itm.附件中的每个objAtt
objAtt.SaveAsFile完整路径
设置objAtt=Nothing
下一个
端接头
我尝试添加“.xslx”,最后,我尝试打开Excel实例,打开文件,保存并关闭

我尝试将其保存为Txt文件。

更改:

Full_Path = saveFolder & "\" & File_Name
致:


使用附件文件名

objAtt.SaveAsFile saveFolder & "\" & objAtt.FileName
应该是

范例


objAtt.SaveAsFile
指令上放置一个断点(F9),运行代码,然后检查
Full\u Path
(将鼠标悬停在变量上,或打开局部变量工具窗口,或Ctrl+G和
?Full\u Path
)的值-这是您期望的结果吗?看看你的代码,你似乎已经理解了解决这个问题所需的一切:学习使用调试器似乎比其他任何东西都更有益。你的附件实际上是xlsx文件吗?如果您从Outlook手动保存它们,是否可以在excel中正常打开它们?@TimWilliams是的,它们都是xslx。几个月来一直在手动处理它们,而且始终是同一个文件,因此该文件本身就可以使用。saveFolder已经有一个终止反斜杠,因此无需在此处再次添加:
Full\u Path=saveFolder&“\”&file\u Name
这是我最初使用它的方式,它可以正常工作。谢谢你提醒我。但我更改了它,因为文件名通常太长,我使用该文件导入ERP系统,并且它不需要长名称。您可以尝试使用GetShortPathName Windows API函数检索短文件名-请参阅
objAtt.SaveAsFile saveFolder & "\" & objAtt.FileName
File_Name = DtString & "_" & SName & strFileType
Option Explicit
Private Sub saveAttachtoDisk(itm As Outlook.MailItem)
    Dim objAtt As Outlook.Attachment
    Dim saveFolder As String
    Dim strFileType As String
    Dim DtString As String
    Dim SName As String
    Dim File_Name As String
    Dim Full_Path As String

    saveFolder = "\\path\path\path\path\Path\"

    strFileType = ".xlsx"

    DtString = Format(Now(), "mm-dd")

    SName = itm.SenderName

    File_Name = DtString & "_" & SName & strFileType

    Full_Path = saveFolder & File_Name
    Debug.Print Full_Path ' print on Immediate Window

    For Each objAtt In itm.Attachments
        objAtt.SaveAsFile Full_Path
        Set objAtt = Nothing
    Next

End Sub