Я пишу новую и исправленную версию макроса VBA Outlook, который будет проходить все встречи в календаре пользователя и изменять часовой пояс каждой повторяющейся серии на Central Standard. Однако, что бы я ни делал, я не могу заставить его правильно обращаться к повторению. В настоящее время при отладке макроса произойдет сбой при первом вызове ex.AppointmentItem.Subject (в инструкции Debug.Print после определения шаблона повторения rPattern). Центральный вопрос здесь: как я могу получить доступ и изменить всю серию повторяющихся встреч одновременно? Могу ли я а) изменить основную встречу, б) выполнить итерацию по всем встречам в серии (что может не установить все будущие вхождения так, как мне нужно), или в) выполнить итерацию по коллекции исключений и изменить повторение оттуда? Мне сказали, что итерация по коллекции исключений (хотя название и вводит в заблуждение) — единственный способ изменить повторение. Это правильно?
Я глубоко признателен за любую помощь, которую вы можете предоставить, спасибо!
Примечание. Элемент aItem‹>Null был закомментирован в качестве теста, по какой-то причине проверка элемента Null (даже попытка ключевого слова Nothing) всегда вызывала ошибку.
Public Sub IterateAll()
Dim olApp As New Outlook.Application
Dim aObject As Object
Dim calCollection As Outlook.Items
Dim tzs As Outlook.TimeZones
Dim tzCentral As Outlook.TimeZone
Dim tzUTC As Outlook.TimeZone
Dim olNameSpace As Outlook.NameSpace
Dim rPattern As Outlook.RecurrencePattern
Dim ex As Outlook.Exception
Dim s As Outlook.TimeZone
Dim e As Outlook.TimeZone
Set olNameSpace = olApp.GetNamespace("MAPI")
Set calCollection = olNameSpace.GetDefaultFolder(olFolderCalendar).Items
Set tzs = Application.TimeZones
Set tzCentral = tzs("Central Standard Time")
Set tzUTC = tzs("UTC")
For Each aObject In calCollection
If aObject.IsRecurring Then
Set rPattern = aObject.GetRecurrencePattern
Debug.Print ("Subject: " + aObject.Subject)
Debug.Print ("Old Time Zone is " & aObject.StartTimeZone)
aObject.StartTimeZone = tzCentral
aObject.EndTimeZone = tzCentral
Debug.Print ("New Time Zone is " & aObject.StartTimeZone)
aObject.Save
End If
Next
End Sub