[英]VBA to save attachments (based on defined criteria) from an email with multiple accounts
[英]VBA to download email attachments from Outlook with multi Criteria
我正在尝试创建一个代码,从 excel(日期、主题、email 正文、邮箱、文件夹导航和导出到)中的某些输入中,我从下载的这些特定电子邮件中获取附件。
我的问题是,即使代码获得了正确的邮箱和文件夹,并将附件下载到我想要的文件夹,它也没有得到日期、主题和 email 正文。 整个目标是从日期开始的电子邮件中下载附件,email 主题包含一些单词,email 正文包含某些单词,但是我得到的是邮箱中所有电子邮件的附件。
这是我的代码(我试图将 & 更改为 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
```
首先,不需要遍历文件夹中的所有项目,如代码所示:
For Each olItem In olFolder.Items
If olItem.Class = olMail Then
相反,Outlook object model 提供Items
ZA2F2ED4F8EBC2ABCBB4DC40 的Find
/ FindNext
或Restrict
方法。 因此,您将能够仅迭代与您的搜索条件相对应的项目。 在以下文章中阅读有关这些方法的更多信息:
例如,以下搜索条件可用于获取带有附件和包含关键字的主题的项目:
Filter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:subject" & _
Chr(34) & " Like '%keyword%' AND " & _
Chr(34) & "urn:schemas:httpmail:hasattachment" & _
Chr(34) & "=1"
有关更多示例,请查看VBA Outlook:查找特定附件并以不同的名称保存并检查发件人电子邮件地址。
此外,您可能会发现Application
class 的AdvancedSearch
方法很有帮助。 有关更多信息,请参阅 Outlook 中的高级搜索以编程方式:C#、VB.NET 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.