Как считать электронные письма в пределах часового диапазона? - PullRequest
0 голосов
/ 15 октября 2019

Моя команда использует outlook для отслеживания выполненных работ. Все работы должны быть выполнены в течение 48 часов с момента получения, и мы должны строго следить за этим. Мне удалось собрать функцию, которая подсчитывает электронные письма, которые вышли за пределы 2-дневного диапазона, но трек должен быть сокращен до часа.

Независимо от того, сколько конфигураций я пробовал, я былневозможно получить мой код для подсчета в пределах часового диапазона. Вот как выглядит мой текущий код:

Dim OOSLAitms As Outlook.Items
Dim DateDiff As Long
Dim Filter As String
Dim i As Long
DateDiff = Now - 2
    Filter = "[Received]  < '" & Day(DateDiff) & _
                         "/" & Month(DateDiff) & _
                         "/" & Year(DateDiff) & "'"

Set OOSLAitms = itms.Restrict("[FlagStatus] = 0")
Set OOSLAitms = OOSLAitms.Restrict(Filter)

For i = OOSLAitms.Count To 1 Step -1
    Worksheets("Sheet1").Range("F4").Value = OOSLAitms.Count
Next

Это позволяет считать все электронные письма, полученные в течение календарного дня, но не учитывает часы дня. Так, например, если мы получили 300 дел в воскресенье, они будут подсчитывать все до полуночи, а не только до текущего времени (например, 16:00).

Мне нужна помощь с включением критериев часов / минутв мой код поверх дня / месяца / года, если это возможно.

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Нет свойства Received, вместо него необходимо использовать ReceivedTime.

И если вам нужно получить только часовой диапазон, вы должны указать границы для критериев поиска:

Dim searchCriteria As String = "[ReceivedTime]<=""" + dateTimeEnd + """ AND [ReceivedTime]>=""" + dateTimeStart + """"
0 голосов
/ 15 октября 2019

Ладно, поэкспериментировав с ним (и щедрым количеством ящиков с сообщениями отладки), мне удалось заставить его работать, используя следующий трюк:

  1. Создал выходную ячейку«A11» на первом листе с функцией a = NOW () в формате «ддд дд / мм / гггг чч: мм»

  2. Создана ячейка «A1» на листе обработки, котораяработал формула «Лист1! А11 - 2». Причина в том, что по какой-то причине при выполнении «Сейчас - 2» через VBA, даже при форматировании это всегда давало полночь. Выполнение этого через autocalc в ячейках дает правильное вычитание с точностью до секунды.

Причина форматирования "дд дд / мм / гггг чч: мм" заключается в том, что это формат, который "Столбец "Получено" в Outlook сохраняет время получения. Если не указать, что 'ddd' перед строкой datetime приводит к ошибке автоматизации.

Окончательный код выглядит следующим образом:

Dim OOSLAitms As Outlook.Items
Dim DateDiff As Long
Dim Filter As String
Dim Today As String

Today = Format(ThisWorkbook.Sheets("Sheet2").Range("A1"), "ddd dd/mm/yyyy hh:mm")
        Filter = "[Received]" & "<" & Today

Set OOSLAitms = itms.Restrict("[FlagStatus] = 0")
Set OOSLAitms = OOSLAitms.Restrict(Filter)
Worksheets("Sheet1").Range("F4").Value = OOSLAitms.Count
...