Вопрос по vba, outlook-2010, timezone, recurring – Как изменить свойства (часовой пояс) повторяющихся встреч в Outlook 2010 VBA

0

Я пишу новую и пересмотренную версию макроса VBA Outlook, которая будет проходить через все встречи в календаре пользователя и изменять каждую повторяющуюся серию ». часовой пояс к центральному стандарту. Однако независимо от того, что я делаю, я не могу заставить его правильно обращаться к повторению. В настоящее время, когда я отлаживаю макрос, он потерпит неудачу при первом вызове ex.AppointmentItem.Subject (в операторе Debug.Print после определения шаблона повторения rPattern). Главный вопрос здесь: как я могу получить доступ и изменить всю серию повторяющихся встреч одновременно? Могу ли я а) изменить основную встречу, б) перебрать все встречи в серии (что может не устанавливать все будущие вхождения, как мне нужно), или в) перебрать коллекцию исключений и изменить повторение оттуда? Мне сказали, что перебор коллекции исключений (хотя вводит в заблуждение по имени) - единственный способ изменить повторение. Это правильно?

Я высоко ценю любую помощь, которую вы можете оказать, спасибо!

Примечание. Элемент aItem & lt; & gt; Null был закомментирован как тест, по какой-то причине проверка элемента Null (даже использованного ключевого слова Nothing) всегда вызывала ошибку.

    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

Ваш Ответ

1   ответ
2

Я был в состоянии получить доступ ко всем повторяющимся встречам. Смотрите этот образец. Я использую позднюю привязку с 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

FOLLOWUP

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
Я только что проверил, и это работает. Сохраняете ли вы встречу после смены часового пояса? Смотрите приведенный выше код.
Это также изменит Конечный часовой пояс? flyingscotsman74656
Я не знаком с поздним связыванием, не могли бы вы уточнить? flyingscotsman74656
Latebinding - это то место, где вам не нужно заранее устанавливать ссылку. Если вы делаете это в Outlook VBA, то это не имеет значения. В конце связывания вы объявляете свои объекты как & quot; Объекты & quot; напримерDim oOlAp As Object, Вы можете заменить его декларацией из вашего кода.
Проблема, с которой я сталкиваюсь, заключается в том, что я могу получить доступ ко всем повторяющимся встречам, я просто не могу изменить их так, как мне действительно нужно. Есть ли способ изменить время повторяющихся серий? flyingscotsman74656

Похожие вопросы