Я запускаю макрос в Excel, чтобы заполнить общий календарь Outlook.Дело в том, что у меня нет проблем с добавлением встреч в календарь, но когда даты меняются, я хочу скрыть старые, заменить их новыми событиями.У меня есть код, который должен фильтровать элементы, которые я хочу подавить, но по какой-то причине TypeName моих событий Outlook остается в «Nothing», и я не могу понять, почему.
Здесь - это тестовое событие в моем календаре, которое необходимо подавить.
Вот код:
Sub SuppressOutlookEvents()
Dim olApp As Outlook.Application
Dim objAppointment As Outlook.AppointmentItem
Dim objAppointments As Outlook.MAPIFolder
Dim objNameSpace As Outlook.Namespace
Dim objProperty As Outlook.UserProperty
Dim OutlookStartTime, OutlookEndTime As Date
Dim sFilter As Variant
Worksheets("to_be_removed").Activate
OutlookStartTime = DateValue("10-15-2019")
Set olApp = CreateObject("Outlook.Application")
Set objNameSpace = olApp.GetNamespace("MAPI")
Set objAppointments = objNameSpace.GetDefaultFolder(olFolderCalendar)
sFilter = "[Start] = OutlookStartTime And [Subject] = 'Test'"
Set objAppointment = objAppointments.Items.Find(sFilter)
```
MsgBox (TypeName(objAppointment)) 'Here it displays "Nothing"
If Not TypeName(objAppointment) = "Nothing" Then
objAppointment.Delete
End If
```
Set objAppointment = Nothing
Set objAppointments = Nothing
End Sub
Я не знаю, распознает ли фильтрсобытие или, если это по другой причине ...
РЕДАКТИРОВАТЬ: благодаря ответам у меня наконец есть рабочий код:
Sub suppress_outlook_event(Optional row As Integer = 2)
Dim olApp As Outlook.Application
Dim objAppointments As Outlook.MAPIFolder
Dim objNameSpace As Outlook.Namespace
Dim objProperty As Outlook.UserProperty
Dim OutlookStartTime, OutlookEndTime As Date
Dim sFilter As Variant
OutlookStartTime = Format("09/19/19" & " " & "8:00 AM", "mm/dd/yyyy hh:mm AMPM")
Set olApp = CreateObject("Outlook.Application")
Set objNameSpace = olApp.GetNamespace("MAPI")
Set objAppointments = objNameSpace.GetDefaultFolder(olFolderCalendar)
o_title = "Example"
sFilter = "[Subject] = " & Chr(34) & o_title & Chr(34)
objAppointments.Items.IncludeRecurrences = True
objAppointments.Items.Sort "[Start]"
Set objAppointment = objAppointments.Items.Restrict(sFilter)
objAppointment.IncludeRecurrences = True
If Not objAppointment.Count = 0 Then
obj_count = objAppointment.Count
For i = 1 To obj_count
objAppointment(obj_count + 1 - i).Delete
Next i
End If
Set objAppointment = Nothing
Set objAppointments = Nothing
End Sub