首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA从Outlook下载电子邮件附件

VBA从Outlook下载电子邮件附件
EN

Stack Overflow用户
提问于 2021-12-16 19:44:58
回答 1查看 682关注 0票数 0

我试图创建一个代码,其中从excel中的特定输入(日期,主题,电子邮件正文,邮箱,文件夹导航和导出到),我从这些特定的电子邮件下载附件。

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

下面是我的代码(我试图更改& for,但它甚至没有下载):

代码语言:javascript
复制
 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
代码语言:javascript
复制
EN

回答 1

Stack Overflow用户

发布于 2021-12-16 19:54:40

首先,没有必要对文件夹中的所有项进行迭代,如代码所示:

代码语言:javascript
复制
For Each olItem In olFolder.Items
    If olItem.Class = olMail Then

相反,Outlook对象模型提供了Find/FindNextItems类的Restrict方法。因此,您将能够迭代仅对应于您的搜索条件的项。请参阅以下文章中有关这些方法的更多信息:

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

代码语言:javascript
复制
Filter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:subject" & _
                   Chr(34) & " Like '%keyword%' AND " & _
                   Chr(34) & "urn:schemas:httpmail:hasattachment" & _
                   Chr(34) & "=1"

要获得更多的示例,请查看VBA Outlook:查找特定附件并以不同的名称保存检查senderEmailAddress

此外,您可能会发现AdvancedSearch类的Application方法很有用。有关详细信息,请参阅以编程方式在Outlook中进行高级搜索: C#、VB.NET

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70384756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档