Restrict items не возвращает никаких результатов, просто 0 - PullRequest
0 голосов
/ 11 июня 2019

Я подготовил инструмент, который загружает вложения электронной почты на основе ограничений пользователя. Он работает хорошо, но когда я внедрял его в нового человека из другого отдела, у меня возникла странная проблема, потому что ограничение функциональности не работает вообще. Я предоставляю почтовый ящик, папку и сведения об ограничениях, как показано ниже, и он возвращает 0, когда я проверяю каждое электронное письмо через цикл, чтобы увидеть все из них.

Set olApp = CreateObject("Outlook.Application")
Set olNamespace = olApp.GetNamespace("MAPI")
Set olMailboxFolder = olNamespace.Folders("FolderA").Folders("FolderB")

strRestriction = "[ReceivedTime] > '" & Format(myStartDate, "DDDDD HH:MM") & "' AND [ReceivedTime] < '" & Format(myEndDate, "DDDDD" & " 23:59") & "'"

Set olEmailFound = olMailboxFolder.Items.Restrict(strRestriction)

Это может быть что-то с настройкой outlook / folder? Если код был бы неправильным, он нигде не будет работать, но только один человек ...

1 Ответ

0 голосов
/ 11 июня 2019

Вы должны использовать правильное форматирование строковых выражений значения даты:

Не работает:

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

Обратите внимание, что если в отформатированные строки включены секунды, сравнение не удастся.

...