Вы должны использовать правильное форматирование строковых выражений значения даты:
Не работает:
strRestriction = "[ReceivedTime] >= #" & Format(myStartDate, "yyyy\/mm\/dd hh\:nn") & "# AND [ReceivedTime] < #" & Format(DateAdd("d", 1, myEndDate), "yyyy\/mm\/dd") & "#"
Рабочая:
Ссылка на документ: Items.Restrict метод (Outlook)
Хотя даты и время обычно хранятся в формате даты,
Методы поиска и ограничения требуют преобразования даты и времени
в строковое представление. Чтобы убедиться, что дата отформатирована как
Microsoft Outlook ожидает, используйте функцию форматирования.
Однако документация содержит ошибки. Часть AM/PM
пропускает косую черту:
sFilter = "[LastModificationTime] > '" & Format("1/15/99 3:30pm", "ddddd h:nn AMPM") & "'"
То, что работает в международной среде, это предопределенные форматы. Таким образом, это работает с датской локализацией:
Dim StartDate As String
Dim EndDate As String
Dim n As Integer
StartDate = Format(myStartDate, "Short Date") & " " & Format(myStartDate, "Short Time")
EndDate = Format(myEndDate, "Short Date") & " " & Format(myEndDate, "Short Time")
strRestriction = "[ReceivedTime] >= '" & StartDate & "' And [ReceivedTime] < '" & EndDate & "'"
Debug.Print strRestriction
Debug.Print olMailboxfolder.Items.Count
Set olEmailFound = olMailboxfolder.Items.Restrict(strRestriction)
For n = 1 To olEmailFound.Count
Debug.Print n, olEmailFound.Item(n).ReceivedTime
Next
Обратите внимание, что если в отформатированные строки включены секунды, сравнение не удастся.