Я имею в виду получить все AppointmentItem
в диапазоне Date
и вернуть их как коллекцию. Это функция, которую я написал
Function GetAppointmentItemsDatesRange(ByVal dstart As Date, ByVal dend As Date) As Outlook.Items
'=======================================================
' Get all AppointmentItem in a range of dates
'=======================================================
Dim oCalendar As Outlook.Folder
Set oCalendar = Application.Session.GetDefaultFolder(olFolderCalendar)
Dim objItems As Outlook.Items
Dim objRestrictedItems As Outlook.Items
Set objItems = oCalendar.Items
objItems.IncludeRecurrences = True
'objItems.IncludeRecurrences = False
objItems.Sort "[Start]"
Dim filterRange As String
filterRange = "[Start] >= " & Chr(34) & Format(dstart, "dd/mm/yyyy hh:mm AM/PM") & Chr(34) & " AND " & _
"[End] <= " & Chr(34) & Format(dend, "dd/mm/yyyy hh:mm AM/PM") & Chr(34) ' <-- Line #1'
Set objRestrictedItems = objItems.Restrict(filterRange)
Debug.Print "Filter : " & filterRange
Dim oItem As Outlook.AppointmentItem
Dim iIt As Long
Dim nItFilter As Long, nIt As Long
nItFilter = objRestrictedItems.Count
nIt = 0
Debug.Print nItFilter & " total items"
For Each oItem In objRestrictedItems
If (Not (oItem Is Nothing)) Then
nIt = nIt + 1
Debug.Print oItem.Start & "-" & oItem.End ' <-- Line #2'
End If
Next oItem
Debug.Print nIt & " net items"
Set GetAppointmentItemsDatesRange = objRestrictedItems
End Function
Я пробовал и с .IncludeRecurrences = True
, и с False
. Это результат, который я получаю.
False
:
Filter : [Start] >= "07/11/2020 05:30 PM" AND [End] <= "07/11/2020 06:15 PM"
9 total items
31/12/2015 9:00:00-31/12/2015 9:00:00
31/01/2017 15:30:00-31/01/2017 15:30:00
18/03/2020 12:00:00-18/03/2020 16:00:00
13/04/2020 8:45:00-13/04/2020 9:00:00
09/09/2020 11:00:00-09/09/2020 12:00:00
28/09/2020 14:45:00-28/09/2020 18:00:00
01/10/2020 13:30:00-01/10/2020 15:00:00
07/11/2020 17:30:00-07/11/2020 17:45:00
07/11/2020 17:45:00-07/11/2020 18:15:00
9 net items
True
:
Filter : [Start] >= "07/11/2020 05:30 PM" AND [End] <= "07/11/2020 06:15 PM"
2147483647 total items
07/11/2020 17:30:00-07/11/2020 17:45:00
07/11/2020 17:45:00-07/11/2020 18:15:00
2 net items
Поэтому я определяю две проблемы, чтобы получить мой результат:
- Выходные данные
Line #1
иLine #2
кажутся противоречивыми в обоих случаях. Я не понимаю, почему первые 7 элементов не отфильтровываются в случаеFalse
, даже если я могу избавиться от них с помощьюTrue
. И я не понимаю, что это за слишком многоNothing
предметов вTrue
случае. - Я не знаю, как определить коллекцию, в которую я могу добавить элементы, удовлетворяющие условию
If (Not (oItem Is Nothing))
, поэтому я могу вернуть ее при выходе для использования вызывающей стороной.
Какое объяснение вопросов? Как я могу достичь своей цели?
dstart
иdend
- этоDate
, согласно прототипу функции. Я не уверен, как иначе сделать то, что вы предлагаете. 2) Я думаю, что это несущественно в любом случае. VBA не заботится о том, как я создаюfilterRange
, который являетсяString
. Он заботится только о своем содержимом. 3) Я прочитал источник, на который вы ссылаетесь. Так что я не понимаю, что конкретно вы предлагаете. Не могли бы вы опубликовать код, чтобы проиллюстрировать это? Спасибо - person sancho.s ReinstateMonicaCellio   schedule 11.11.2020objItems.IncludeRecurrences = False
наobjItems.IncludeRecurrences = True
. Я думаю, что может происходить то, что повторяющиеся события календаря по-прежнему включаются в том виде, в каком они появились в этом временном диапазоне, но отображаются с первоначально запланированным временем. Кроме того, я считаю, что для строки даты ожидается форматddddd hh:nn AMPM
, я думаю, что его тоже нужно обновить. - person Ryan Wildry   schedule 11.11.2020objItems.IncludeRecurrences = True
дает правильный вывод, это правильно? - person Ryan Wildry   schedule 11.11.2020If (Not (oItem Is Nothing))
. Это было бы нормально, если бы я мог использовать это, чтобы собрать коллекцию, которая будет возвращена из функции и использована вызывающей стороной, как указано в вопросе. - person sancho.s ReinstateMonicaCellio   schedule 11.11.2020