我尝试使用Excel VBA过滤掉我的Outlook邮件收件箱,然后在条件满足时最终发送电子邮件。
完整条件是:如果Outlook收件箱包含日期范围(过去7天)内的主题和发件人(动态发件人电子邮件)。
我已经完成了sub sendEmails()
,现在正在努力过滤邮件。
我现在已成功过滤出我正在查看的主题的代码。 但是,在尝试将日期范围包含到过滤器中之后, 它搞砸了。
第一个问题:过滤器正在给我
运行时错误13:输入不匹配。
我知道发生这种情况是因为过滤器包含String
和Date
值,因此我尝试将类型更改为variant
但仍然遇到错误。
另一个问题是我跟着this post尝试添加日期条件。并this post为日期应用过滤器。 如果有经验的人可以纠正我的错误,那么很多错误都会受到赞赏。 (Haven还没到那里,但只有强烈的感觉会出现错误)
这是我第一次使用这个,所以请放轻松。
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
答案 0 :(得分:1)
假设您只是在添加日期文件管理器时遇到问题,可以找到有用的内容here。
现在将其应用到您的代码中,您必须用单引号括起您的日期(& #39)。
虽然日期和时间通常以日期格式存储,但查找和限制方法要求将日期和时间转换为字符串表示。
Dim tdyDate As String, checkDate As String
tdyDate = "'" & Format(Date, "Short Date") & "'"
checkDate = "'" & Format(Date - 7, "Short Date") & "'"
或者你可以尝试:
tdyDate = Format(Date, "\'ddddd\'") '/* until todays date */
checkDate = Format(Date - 7, "\'ddddd\'") '/* I suppose you are filtering 7 days ago? */
然后构建过滤器:
eFilter = "@SQL= (urn:schemas:httpmail:subject Like 'Reminder on Subject'" & _
" And urn:schemas:httpmail:datereceived >= " & checkDate & _
" And urn:schemas:httpmail:datereceived <= " & tdyDate & ")"
注意:我使用eFilter
代替Filter
作为变量,因为它是VBA中的保留字。 子>
会给你:
@ SQL =(urn:schemas:httpmail:subject Like&#39; Reminder on Subject&#39; and urn:schemas:httpmail:datereceived&gt; =&#39; 1/2/208&#39;和urn :schemas:httpmail:datereceived&lt; =&#39; 1/9/2018&#39;)