如何自动从Outlook保存附件?

时间:2018-12-18 19:28:06

标签: vba outlook outlook-vba

我正在尝试编写脚本以从每天收到的Outlook电子邮件中提取Excel报告,并将其保存在“文档”文件夹中的“ OLAttachments”文件夹中。

我还需要它来覆盖前一天的文件,因为这些电子邮件附件每天都有相同的名称。

到目前为止,这是我所拥有的,但是每次发送电子邮件时,它都会另存为新文件,而我想覆盖现有文件。感谢您的帮助! :)

Public Sub SaveAttachmentsToDisk(MItem As Outlook.MailItem)
Dim oAttachment As Outlook.Attachment
Dim sSaveFolder As String
sSaveFolder = "C:\Users\fmustapha\Documents\Outlook Attachments"
For Each oAttachment In MItem.Attachments
oAttachment.SaveAsFile sSaveFolder & oAttachment.DisplayName
Next
End Sub

3 个答案:

答案 0 :(得分:1)

我在服务器上执行此操作,每天晚上我都会收到一封附有Excel文件的电子邮件,该文件会自动转发到我的服务器,此Outlook代码将保存该附件。请注意,其中有一个子句可确保文件来自我,并确保它是Excel文件:

Private WithEvents olItems As Outlook.Items

Private Sub Application_Startup()
Dim objNS As Outlook.NameSpace
Set objNS = GetNamespace("MAPI")
Set olItems = objNS.GetDefaultFolder(olFolderInbox).Items
Set objNS = Nothing
End Sub

Private Sub olItems_ItemAdd(ByVal Item As Object)
    Dim NewMail As Outlook.MailItem
    Dim Atts As Attachments
    Dim Att As Attachment
    Dim strPath As String
    Dim strName As String

    If Item.Class = olMail Then
       Set NewMail = Item
    End If
    strPath = "C:\Reporting Archive\Sales Files\"
    If NewMail.Sender = "Dan Donoghue" Then

       Set Atts = Item.Attachments

       If Atts.Count > 0 Then
          For Each Att In Atts
              If InStr(LCase(Att.FileName), ".xls") > 0 Then Att.SaveAsFile strPath & Att.FileName
          Next
       End If
    End If
End Sub

将其放入VBE中的ThisOutlookSession中,将其关闭并重新打开Outlook后即可使用。

要保存在顶部,我建议您先删除现有文件(您可以使用kill命令,然后简单地保存新文件)。

您可以通过替换以下内容来实现:

If InStr(LCase(Att.FileName), ".xls") > 0 Then Att.SaveAsFile strPath & Att.FileName

与此:

If InStr(LCase(Att.FileName), ".xls") > 0 Then
    Kill strPath & Att.FileName
    Att.SaveAsFile strPath & Att.FileName
End If

在我的代码中

答案 1 :(得分:0)

尝试使用Date function,它返回包含当前系统日期的变量(日期)。 MSDN

示例

oAttachment.SaveAsFile sSaveFolder & "New Members" & " " & Format(Date - 1, "MM-DD-YYYY")

答案 2 :(得分:0)

您可以设置一条规则,以所需的任何频率触发此作业(您可能不希望该规则在几秒钟内运行,而更像是每天运行1次,隔夜运行等)

java.util.NoSuchElementException

https://www.extendoffice.com/documents/outlook/3747-outlook-auto-download-save-attachments-to-folder.html#a1