Outlook项目限制与日期问题

时间:2016-07-11 15:24:27

标签: vba outlook outlook-vba

我有一个outlook宏,可以按日期过滤电子邮件对象,并根据数组返回项目。它适用于今天收到的电子邮件,但我一直遇到问题,试图让它只过滤到昨天收到的电子邮件。今天的过滤器如下:

sfilter = "[ReceivedTime]>=""&Date()12:00am&"""
Set myItems = myNewFolder.Items.Restrict(sfilter)

sFilter是一个字符串,它按预期返回今天的项目。以下是我尝试过滤到昨天但没有返回正确的项目。

sfilter = "[ReceivedTime]>=""&Date(-1) 12:00am&"" AND [ReceivedTime]<= ""&Date() 12:00am&"" "
tfilter = Format(DateAdd("d", -1, Date), "mm/dd/yyyy")
rFilter = Format(DateAdd("d", 0, Date), "mm/dd/yyyy")

我打算使用tFilter和rFilter作为sFilter的上限和下限,但这也不起作用。我在MSDN网站上查看功能信息之后尝试使用DateAdd方法但是没有返回昨天的项目。我尝试了这个问题提供的解决方案,但没有帮助(Outlook .Restrict does not work with Date)。

我不确定为什么带有日期(-1)的方法不能与日期协同工作。根据MSDN网站的逻辑运算符应该可以正常工作。理解这个问题的任何帮助都会受到赞赏。提前谢谢!

注意:引用的下三个示例不会返回任何错误并正确编译。但是,他们没有按预期过滤。

2 个答案:

答案 0 :(得分:3)

You can find yesterday's mail with two separate Restricts.

Private Sub EmailYesterday()

Dim oOlInb As Folder
Dim oOlItm As Object

Dim oOlResults As Object
Dim i As Long

Dim sFilter As String
Dim sFilter2 As String

Set oOlInb = Session.GetDefaultFolder(olFolderInbox)

'Filter recent - Lower Bound of the range
sFilter = "[ReceivedTime]>'" & format(Date - 1, "DDDDD HH:NN") & "'"

Debug.Print vbCr & sFilter
Set oOlResults = oOlInb.Items.Restrict(sFilter)
Debug.Print oOlResults.count & " items."

If oOlResults.count > 0 Then
    For i = 1 To oOlResults.count
        Set oOlItm = oOlResults(i)
        Debug.Print oOlItm.Subject & " - " & oOlItm.ReceivedTime
    Next i
End If

' Filter range - Upper Bound
sFilter2 = "[ReceivedTime]<'" & format(Date, "DDDDD HH:NN") & "'"

Debug.Print vbCr & sFilter; " AND " & sFilter2

Set oOlResults = oOlResults.Restrict(sFilter2)   ' Restrict the Lower Bound result
Debug.Print oOlResults.count & " items."

If oOlResults.count > 0 Then
    For i = 1 To oOlResults.count
        Set oOlItm = oOlResults(i)
        Debug.Print oOlItm.Subject & " - " & oOlItm.ReceivedTime
    Next i
End If

ExitRoutine:
    Set oOlInb = Nothing
    Set oOlResults = Nothing
    Debug.Print "Done."

End Sub

答案 1 :(得分:0)

昨天的日期可以如下过滤

oOlResults.Restrict("@SQL=%yesterday(""urn:schemas:httpmail:datereceived"")%")

今天或本月相同。

 oOlResults.Restrict("@SQL=%today(""urn:schemas:httpmail:datereceived"")%")
 oOlResults.Restrict("@SQL=%thismonth(""urn:schemas:httpmail:datereceived"")%")

更多信息here