0

ユーザーの予定表のすべての予定を調べ、すべての定期的なシリーズのタイム ゾーンを中央標準に変更する VBA Outlook マクロの新しい改訂版を作成しています。しかし、何をしても、繰り返しに適切にアクセスできないようです。現在、マクロをデバッグすると、最初に ex.AppointmentItem.Subject を呼び出すときに失敗します (繰り返しパターン rPattern が定義された後の Debug.Print ステートメント内)。ここでの中心的な質問は、一連の定期的な予定全体に一度にアクセスして変更するにはどうすればよいかということです。a) マスター アポイントメントを変更できますか、b) シリーズ内のすべてのアポイントを反復処理できますか (必要に応じて将来のすべてのオカレンスを設定できない可能性があります)、または c) 例外コレクションを反復処理し、そこから繰り返しを変更しますか? 繰り返しを変更する唯一の方法は、例外コレクションを反復処理することです (名前は誤解を招きますが)。これは正しいです?

あなたが提供できる助けに深く感謝します、ありがとう!

注: aItem<>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
4

1 に答える 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

ファローアップ

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
于 2012-08-03T05:12:24.730 に答える