按日期限制 Outlook 项目

mmo*_*het 4 outlook vba

我有一个 Outlook 宏,它按日期过滤电子邮件对象并根据数组返回项目。

今天的过滤器如下:

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

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")
Run Code Online (Sandbox Code Playgroud)

我打算使用 tFilter 和 rFilter 作为 sFilter 的上限和下限。

在使用函数信息查看 MSDN 站点后,我尝试使用 DateAdd 方法,但没有返回昨天的项目。

我尝试了在这个问题上提供的解决方案(Outlook .Restrict 方法不适用于 Date)。

带有 date(-1) 的方法不能与 date 一起使用。根据 MSDN 站点的逻辑运算符应该可以工作。

注意:下面三个示例引用编译并且不返回任何错误。

nit*_*ton 7

您可以通过两个单独的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
Run Code Online (Sandbox Code Playgroud)