![](/img/trans.png)
[英]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.