首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Outlook 2010 VBA中修改定期约会的属性(时区)

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

Stack Overflow用户
提问于 2012-08-02 20:15:35
回答 1查看 3.2K关注 0票数 0

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

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

注意: aItem<>Null作为一个测试被注释掉了,由于某种原因,检查一个空项(甚至尝试了Nothing关键字)总是会导致一个错误。

代码语言:javascript
复制
    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
EN

回答 1

Stack Overflow用户

发布于 2012-08-03 05:12:24

我能够访问所有的定期约会。看这个样本。我正在使用与Outlook的后期绑定。

代码语言:javascript
复制
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

随访

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11785074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档