我正在尝试使用 Excel VBA 过滤掉我的 Outlook 邮件收件箱,然后在满足条件时最终发送电子邮件。
完整的条件是:如果 Outlook 收件箱包含日期范围内(过去 7 天)且来自发件人(动态发件人电子邮件)的主题。
我已经完成了sub sendEmails()
,现在正在努力过滤邮件。
我现在已经成功过滤掉了我正在查看的主题的代码。
但是,在尝试将日期范围包含到过滤器中之后,
搞砸了。
第一个问题:过滤器给了我
运行时错误 13:类型不匹配。
我知道会发生这种情况,因为过滤器包含String
and Date
值,所以我尝试将类型更改为variant
但仍然遇到错误。
另一个问题是我关注了这个帖子 https://stackoverflow.com/questions/42777395/excel-vba-sql-string-filter-multiple-like-condition用于尝试添加日期条件。和这个帖子 https://stackoverflow.com/questions/17316286/search-outlook-mail-item-by-displayed-received-date-instead-of-header-informatio应用日期过滤器。
如果有经验的人能够纠正我的错误,确实有很多错误,我将不胜感激。
(还没跑到那里,但只是strong感觉会碰到错误)
这是我第一次处理这个问题,所以请放轻松。
Sub Search_Inbox()
Dim myOlApp As New Outlook.Application
Dim objNamespace As Outlook.Namespace
Dim objFolder As Outlook.MAPIFolder
Dim filteredItems As Outlook.Items
Dim itm As Object
Dim Found As Boolean
Dim Filter As Variant
Dim tdyDate As String
Dim checkDate As Date
tdyDate = Format(Now(), "Short Date")
checkDate = DateAdd("d", -7, tdyDate) ' DateAdd(interval,number,date)
Set objNamespace = myOlApp.GetNamespace("MAPI")
Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox)
'https://msdn.microsoft.com/en-us/library/aa579702(v=exchg.80).aspx
Filter = "@SQL=" & Chr(34) & "(urn:schemas:httpmail:subject" & Chr(34) & " like 'Reminder on Subject' &" _
And Chr(34) & "urn:schemas:httpmail:datereceived >= & checkDate & " _
And Chr(34) & "urn:schemas:httpmail:datereceived >= & tdyDate &"
Set filteredItems = objFolder.Items.Restrict(Filter)
If filteredItems.Count = 0 Then
Debug.Print "No emails found"
Found = False
Else
Found = True
' this loop is optional, it displays the list of emails by subject.
For Each itm In filteredItems
Debug.Print itm.Subject
Next
End If
'If the subject isn't found:
If Not Found Then
'NoResults.Show
Else
Debug.Print "Found " & filteredItems.Count & " items."
End If
Set myOlApp = Nothing
End Sub