Ограничение на настраиваемое свойство не работает в элементах календаря Outlook
Я хочу добавить настраиваемое свойство к своим элементам календаря (в идеале оно должно содержать уникальный идентификатор), чтобы я мог использовать ограничение для сбора экземпляров повторяющихся элементов встречи. Но хотя мне кажется, что я могу добавить свойство, я не могу найти способ использовать метод Items.Restrict(), чтобы найти элементы, содержащие свойство.
Я знаю, что я могу получить коллекцию всех элементов в календаре и зациклить каждый, чтобы найти то, что я хочу, но это текущий метод, который я использую, и это медленный способ.
Я просмотрел десятки сайтов и нашел противоречивые ответы о том, возможно ли это вообще, но Microsoft, похоже, так думает (см. Первую ссылку), а также другие люди (см. Вторую ссылку).
Я использовал окно locals в режиме отладки, и Restrict определенно не собирает никаких объектов.
Я могу только предположить, что я делаю что-то не так в разделе "Столбец" (на основании этого "Пользовательские свойства должны быть определены в папке, к которой вы применяете фильтр. Если пользовательские свойства определены только в элементе, поиск завершится неудачно" "- первая ссылка) или вид, но я не могу понять, что.
Я знаю, что я не могу использовать TableView, потому что он не будет включать в себя повторяющиеся экземпляры (см. Третью ссылку).
- https://docs.microsoft.com/en-us/office/vba/outlook/how-to/search-and-filter/filtering-a-custom-field
- http://www.outlookcode.com/threads.aspx?forumid=2&messageid=27942
Sub AddAndRestrictCustomProperty() Dim NS As Outlook.NameSpace Dim dcal As Folder Dim dCalItmes As Items Dim objd As Items, objc As Items Dim item As Outlook.AppointmentItem Dim upCheck As Outlook.UserProperty Dim udpCheck As Outlook.UserDefinedProperty Set NS = Application.GetNamespace("MAPI") Set dcal = NS.GetDefaultFolder(olFolderCalendar) Set dCalItems = dcal.Items Set item = dCalItems.Add(olAppointmentItem) With item .Subject = "Placeholder Appt" .Start = "2/12/2019 4:30PM" .Body = "nothing" .MeetingStatus = olMeeting .Save End With 'adds custom property Set upCheck = item.UserProperties.Add("userPropCheck", olText, True, olText) upCheck.Value = "testing" Debug.Print item.ItemProperties.item("userPropCheck").Value 'prints "testing" item.Save 'gets instances of custom property in objd dCalItems.Sort "[Start]" dCalItems.IncludeRecurrences = True Set objd = dCalItems.Restrict("[subject] = Placeholder Appt And [Start] >= '2/11/2019' and [Start] <= '2/13/2019'") Debug.Print objd(1).ItemProperties.item("userPropCheck").Value 'prints testing 'setColumns seems to not work for custom properties objd.SetColumns ("userPropCheck, subject, start") 'ERROR: The property "userPropCheck" is unknown error 'Jet Restrict Fails Set objc = dCalItems.Restrict("[userPropCheck] = " & Chr(34) & "testing" & Chr(34)) Debug.Print objc(1).ItemProperties.item("userPropCheck").Value 'ERROR: object variable or with block variable not set error 'Jet Find Fails Set objc = dCalItems.Find("[userPropCheck] = " & Chr(34) & "testing" & Chr(34)) Debug.Print objc(1).ItemProperties.item("userPropCheck").Value 'ERROR: object variable or with block variable not set error 'DSAL Restrict Fails sFilter = "@SQL=" & Chr(34) & "http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/userPropCheck" & Chr(34) & "= 'testing'" ''"@SQL=" & Chr$(34) & "http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/userPropCheck" & Chr(34) & " = 'testing'" Set objc = dCalItems.Restrict(sFilter) Debug.Print objc(1).ItemProperties.item("userPropCheck").Value 'ERROR: object variable or with block variable not set error 'DSAL Find Fails sFilter = "@SQL=" & Chr(34) & "http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/userPropCheck" & Chr(34) & "= 'testing'" ''"@SQL=" & Chr$(34) & "http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/userPropCheck" & Chr(34) & " = 'testing'" Set objc = dCalItems.Find(sFilter) Debug.Print objc(1).ItemProperties.item("userPropCheck").Value 'ERROR: object variable or with block variable not set error 'THIS WORKS to filter the actual calendar view Set objView = Application.ActiveExplorer.CurrentView objView.Filter = Chr(34) & "http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/userPropCheck" & Chr(34) & "= 'testing'" objView.Save objView.Apply End Sub
Как видите, я довольно потерян. Я могу добавить настраиваемое свойство к элементу, а затем ограничить что-либо, кроме этого свойства, чтобы получить элемент, а затем распечатать настраиваемое свойство, и я могу отфильтровать текущее представление по настраиваемому свойству, используя представление DSAL.Filter, но используя что в Restrict также не работает.