Jak zmodyfikować właściwości (strefę czasową) cyklicznych spotkań w programie Outlook 2010 VBA
Piszę nową i poprawioną wersję makra VBA Outlook, która przejdzie przez wszystkie spotkania w kalendarzu użytkownika i zmieni strefę czasową każdej cyklicznej serii na Central Standard. Jednak bez względu na to, co robię, nie wydaje mi się, aby prawidłowo uzyskiwał dostęp do powtarzania. Obecnie, gdy debuguję makro, nie powiedzie się po pierwszym wywołaniu wywołania ex.AppointmentItem.Subject (w instrukcji Debug.Print po zdefiniowaniu wzorca powtarzania rPattern). Główne pytanie brzmi: w jaki sposób mogę uzyskać dostęp i modyfikować całą serię cyklicznych spotkań jednocześnie? Czy mogę a) zmodyfikować spotkanie główne, b) przeglądać wszystkie spotkania w serii (które mogą nie ustawiać wszystkich przyszłych zdarzeń tak, jak tego potrzebuję), lub c) przeglądać kolekcję wyjątków i modyfikować cykl od tego momentu? Powiedziano mi, że iterowanie poprzez kolekcję wyjątków (choć mylące w nazwie) to jedyny sposób na modyfikację powtarzalności. Czy to jest poprawne?
Głęboko doceniam każdą pomoc, jaką możesz zapewnić, dzięki!
Uwaga: AItem <> Null został skomentowany jako test, z jakiegoś powodu sprawdzanie elementu Null (nawet próbował słowa Nothing) zawsze powodowało błąd.
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