如何在Outlook 2010 VBA中修改定期约会的属性(时区)

如何在Outlook 2010 VBA中修改定期约会的属性(时区),vba,timezone,outlook-2010,recurring,Vba,Timezone,Outlook 2010,Recurring,我正在编写一个VBA Outlook宏的新修订版本,该宏将遍历用户日历中的所有约会,并将每个定期序列的时区更改为中央标准。然而,无论我做什么,我似乎都无法让它正确地访问复发。目前,当我调试宏时,第一次调用ex.AppointItem.Subject(在定义重复模式rPattern后的debug.Print语句中)时,它将失败。这里的核心问题是:如何一次访问和修改一系列定期约会?我是否可以a)修改主约会,b)迭代该系列中的所有约会(可能不会按照我的需要设置所有未来事件),或者c)迭代异常集合并从此

我正在编写一个VBA Outlook宏的新修订版本,该宏将遍历用户日历中的所有约会,并将每个定期序列的时区更改为中央标准。然而,无论我做什么,我似乎都无法让它正确地访问复发。目前,当我调试宏时,第一次调用ex.AppointItem.Subject(在定义重复模式rPattern后的debug.Print语句中)时,它将失败。这里的核心问题是:如何一次访问和修改一系列定期约会?我是否可以a)修改主约会,b)迭代该系列中的所有约会(可能不会按照我的需要设置所有未来事件),或者c)迭代异常集合并从此处修改重复?有人告诉我,遍历exceptions集合(尽管名称上有误导性)是修改重复的唯一方法。这是正确的吗

我非常感谢你能提供的任何帮助,谢谢

注意:aItemNull被注释为测试,出于某种原因,检查Null项(即使没有尝试过任何关键字)总是会导致错误

    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

我可以访问所有定期约会。看看这个例子。我正在使用Outlook的后期绑定

Option Explicit

Const olFolderCalendar = 9

Sub Sample()
    Dim oOlAp As Object, oOlns As Object, oOlfld As Object
    Dim colItems As Object, colFilteredItems As Object
    Dim oOlpatrn As Object, objItem As Object

    Set oOlAp = CreateObject("Outlook.Application")
    Set oOlns = oOlAp.GetNamespace("MAPI")
    Set oOlfld = oOlns.GetDefaultFolder(olFolderCalendar)

    Set colItems = oOlfld.Items

    Set colFilteredItems = colItems.Restrict("[IsRecurring] = TRUE")

    For Each objItem In colFilteredItems
        Set oOlpatrn = objItem.GetRecurrencePattern
        If oOlpatrn.PatternEndDate > Now Then
            Debug.Print objItem.Subject
        End If
    Next
End Sub
跟进

Const olFolderCalendar = 9

Sub Sample()
    Dim oOlAp As Object, oOlns As Object, oOlfld As Object
    Dim colItems As Object, colFilteredItems As Object
    Dim oOlpatrn As Object, objItem As Object
    Dim tzs As Object, tzCentral As Object

    Set oOlAp = CreateObject("Outlook.Application")
    Set oOlns = oOlAp.GetNamespace("MAPI")
    Set oOlfld = oOlns.GetDefaultFolder(olFolderCalendar)

    Set colItems = oOlfld.Items

    Set colFilteredItems = colItems.Restrict("[IsRecurring] = TRUE")

    Set tzs = Application.TimeZones
    Set tzCentral = tzs("Central Standard Time")

    For Each objItem In colFilteredItems
        Set oOlpatrn = objItem.GetRecurrencePattern
        If oOlpatrn.PatternEndDate > Now Then
            Debug.Print "Old Time Zone is " & objItem.StartTimeZone
            objItem.StartTimeZone = tzCentral
            Debug.Print "New Time Zone is " & objItem.StartTimeZone
            objItem.Save
        End If
    Next
End Sub

我不熟悉后期绑定,你能详细说明一下吗?我遇到的麻烦是我能够访问所有定期约会,我只是不能按照我真正需要的方式修改它们。有没有一种方法可以改变一个重复序列的时间?我刚刚测试了一下,效果很好。更改时区后是否保存约会?请参阅上面的代码。Latebinding是您不需要事先设置引用的地方。如果您是在outlook VBA中执行此操作,那么这并不重要。在后期绑定中,您将对象声明为“对象”,例如
Dim oOlAp as Object
。您可以用代码中的声明替换它。这会改变结束时区吗?