【问题标题】:VBA to download email attachments from Outlook with multi CriteriaVBA 使用多标准从 Outlook 下载电子邮件附件
【发布时间】:2022-01-19 21:11:03
【问题描述】:

我正在尝试创建一个代码,从 excel 中的某些输入(日期、主题、电子邮件正文、邮箱、文件夹导航和导出到)中获取下载的某些电子邮件的附件。

我的问题是,即使代码获取了正确的邮箱和文件夹,并将附件下载到我想要的文件夹,它也没有获取日期、主题和电子邮件正文。整个目标是从日期开始的电子邮件中下载附件,电子邮件主题包含一些单词,电子邮件正文包含某些单词,但是我得到的是邮箱中所有电子邮件的附件。

这是我的代码(我尝试将 & 更改为 AND,但它甚至无法下载):

 Sub download_attachment()

 Dim olApp As Outlook.Application
 Dim olNS As Outlook.Namespace
 Dim olFolder As Outlook.MAPIFolder
 Dim olItem As Object
 Dim mailitem As Outlook.mailitem
 Dim olAtt As Outlook.Attachment 

 Dim Folder_Navigation As String
 Dim folders() As String
 Dim folderIndx As Long
 Dim dateFormat
 dateFormat = Format(Now, "dd.mm.yyyy")

 Set olApp = New Outlook.Application
 Set olNS = olApp.GetNamespace("MAPI")
 Set olFolder = olNS.folders([Sheet1].[Mailbox_Name].Text)
 Folder_Navigation = [Sheet1].[Folder_Navigation].Value
 folders = Split(Folder_Navigation, ";")

For folderIndx = LBound(folders) To UBound(folders)
Debug.Print folders(folderIndx)
 Set olFolder = olFolder.folders(folders(folderIndx))
 Next folderIndx

 For Each olItem In olFolder.Items
    If olItem.Class = olMail Then
        Set mailitem = olItem   

    Debug.Print mailitem.Subject
    Debug.Print mailitem.ReceivedTime

        If mailitem.ReceivedTime > [Sheet1].[Date].Value & _
          InStr(mailitem.Subject, [Sheet1].[Subject].Value) <> 0 & _
          InStr(mailitem.Body, [Sheet1].[Email_Body].Value) <> 0 Then
            For Each olAtt In mailitem.Attachments
                olAtt.SaveAsFile [Sheet1].[Export_To].Text & "\" & olAtt.Filename
            Next olAtt
        End If
    End If
 Next olItem

 Set olFolder = Nothing
 Set olNS = Nothing
 Set olApp = Nothing

 End Sub
```

【问题讨论】:

    标签: excel vba outlook


    【解决方案1】:

    首先,如代码所示,无需遍历文件夹中的所有项目:

    For Each olItem In olFolder.Items
        If olItem.Class = olMail Then
    

    相反,Outlook 对象模型提供Items 类的Find/FindNextRestrict 方法。因此,您将能够仅迭代与您的搜索条件相对应的项目。在以下文章中阅读有关这些方法的更多信息:

    例如,以下搜索条件可用于获取带有附件和包含关键字的主题的项目:

    Filter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:subject" & _
                       Chr(34) & " Like '%keyword%' AND " & _
                       Chr(34) & "urn:schemas:httpmail:hasattachment" & _
                       Chr(34) & "=1"
    

    更多示例请查看VBA Outlook: Find specific attachment and save under different nameCheck for the senderEmailAddress

    您还可能会发现Application 类的AdvancedSearch 方法很有帮助。请参阅Advanced search in Outlook programmatically: C#, VB.NET 了解更多信息。

    【讨论】:

    • 您好@Eugene,感谢您的帮助!我显然是个菜鸟,但是据我了解,这些方法并没有按照我的需要从 excel 文件中获取值,或者如果是这样,我将非常感谢您的建议。另外,从我读到的Find/FindeNext,它不允许我搜索日期标准。
    • 您需要获取单元格值并将其用于筛选 Outlook 中的项目。
    猜你喜欢
    • 2018-01-16
    • 1970-01-01
    • 2020-07-20
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 2014-05-25
    相关资源
    最近更新 更多