Como modificar propriedades (fuso horário) de compromissos recorrentes no Outlook 2010 VBA
Estou escrevendo uma versão nova e revisada de uma macro do VBA Outlook que passará por todos os compromissos no calendário de um usuário e alterará o fuso horário de cada série recorrente para o Padrão Central. Não importa o que eu faça, no entanto, parece que não consigo acessar corretamente a recorrência. No momento, quando eu depurar a macro ele falhará na primeira vez que uma chamada é feita para ex.AppointmentItem.Subject (na instrução Debug.Print após o padrão de recorrência rPattern é definido). A questão central aqui é: como posso acessar e modificar uma série inteira de compromissos recorrentes de uma só vez? Posso a) modificar o compromisso mestre, b) iterar todos os compromissos da série (que podem não definir todas as ocorrências futuras conforme necessário), ou c) percorrer a coleção de exceções e modificar a recorrência de lá? Foi-me dito que a iteração através da coleção de exceções (embora enganosa no nome) é a única maneira de modificar a recorrência. Isso está correto?
Eu aprecio profundamente qualquer ajuda que você possa fornecer, obrigado!
Nota: O aItem <> Null foi comentado como um teste, por algum motivo, a verificação de um item Nulo (até mesmo tentou a palavra-chave Nothing) sempre causou um erro.
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