如何根据收到的时间和主题行将Excel附件保存在新邮件中?

时间:2019-07-07 18:18:37

标签: excel vba outlook save

我对编码还很陌生。我想知道如何使用主题行关键字和接收的时间将特定的Excel附件保存在Outlook收件箱(“早晨的电子邮件”)中。

我每天会收到五封新电子邮件,其中包含Excel附件以保存到同一驱动器文件夹中。

收到的时间可以是昨晚或今天凌晨。

所有五个文件的名称和接收的时间都不同。

收件箱不为空。我不想保存昨天或2周前保存的内容。

Sub SaveAttachments()

    Dim ol As Outlook.Application
    Dim ns As Outlook.Namespace
    Dim fol As Outlook.Folder
    Dim i As Object
    Dim mi As Outlook.MailItem
    Dim at As Outlook.Attachment

    Set ol = New Outlook.Application
    Set ns = ol.GetNamespace("MAPI")
    Set fol = ns.Folders(1).Folders("Morning Emails")

    For Each i In fol.Items

        If i.Class = olMail Then

            Set mi = i

            If mi.Attachments.Count > 0 Then
                For Each at In mi.Attachments
                    at.SaveAsFile "C:\Users\nader\OneDrive\Documents\" & _
                      at.Filename & Format(mi.ReceivedTime, " MM-DD-YYYY")
                Next at   
            End If

        End If

    Next i

End Sub

Set fol = ns.Folders(1).Folders("Morning Emails")行的“尝试操作失败;找不到对象”,即使我已经在Outlook收件箱下创建了该子文件夹。

1 个答案:

答案 0 :(得分:1)

  

设置ol =新Outlook.Application

无需在代码中创建新的Outlook Application实例。使用Application属性在Outlook VBA宏中获取主机应用程序实例。

我建议处理NewMailEx类的Application事件。对于Microsoft Outlook处理的每个收到的项目,将触发一次此事件。该项目可以是几种不同的项目类型之一,例如MailItemMeetingItemSharingItemEntryIDsCollection字符串包含与该项目对应的条目ID。

当新消息到达收件箱时以及在发生客户端规则处理之前,将触发NewMailEx事件。您可以使用EntryIDCollection数组中返回的Entry ID来调用NameSpace.GetItemFromID方法并处理该项目。

Private Sub outApp_NewMailEx(ByVal EntryIDCollection As String)    
      Dim itm as Object
      Set itm = NS.GetItemFromID(EntryIDCollection)
      Debug.Print "mail received"
      If itm.Class = olMail Then
        Dim it as Outlook.MailItem
        Set it = itm       
        if it.Subject = "your subject" then 
          If it.Attachments.Count > 0 Then
            For Each at In mi.Attachments
                at.SaveAsFile "C:\Users\nader\OneDrive\Documents\" & _
                    at.Filename & Format(mi.ReceivedTime, " MM-DD-YYYY")
            Next at
          End If
        End If
      End If
End Sub