Cómo modificar las propiedades (zona horaria) de las citas periódicas en Outlook 2010 VBA
Estoy escribiendo una versión nueva y revisada de una macro de Outlook VBA que pasará por todas las citas en el calendario de un usuario y cambiará la zona horaria de cada serie recurrente a Central Standard. No importa lo que haga, sin embargo, parece que no puedo lograr que acceda a la repetición correctamente. En la actualidad, cuando depuro la macro, fallará la primera vez que se realice una llamada a ex.AppointmentItem.Subject (en la instrucción Debug.Print después de definir el patrón de periodicidad rPattern). La pregunta central aquí es: ¿cómo puedo acceder y modificar una serie completa de citas recurrentes a la vez? ¿Puedo a) modificar la cita maestra, b) iterar a través de todas las citas en la serie (que puede que no establezca todas las ocurrencias futuras según lo necesite), o c) iterar a través de la recopilación de excepciones y modificar la repetición desde allí? Me han dicho que la iteración a través de la colección de excepciones (aunque es engañosa en el nombre) es la única forma de modificar la repetición. ¿Es esto correcto?
¡Aprecio profundamente cualquier ayuda que pueda proporcionar, gracias!
Nota: aItem <> Null se comentó como una prueba, por alguna razón, la comprobación de un elemento Null (incluso la palabra clave Nothing intentada) siempre provocaba un error.
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