Outlook MeetingItemの基礎となるオブジェクトタイプを見つけます

StackOverflow https://stackoverflow.com/questions/4365890

  •  09-10-2019
  •  | 
  •  

質問

私はVBAを使用してスキャンしています MAPIFolders にとって Items それらをアーカイブPSTに移動するために、特定の日付の前に作成されました。通常は Item.CreationDate 「古い」Outlookアイテムをスキャンするのに適したフックですが、カレンダーエントリの場合、「作成日」は「開始日」の前になる可能性があるため、カレンダーエントリの場合は後者を使用したいと思います。

私の問題はタイプです MeetingItem どちらができますか

  • 予約 .GetAssociatedAppointment(False) うまくいくようです
  • 受信した予約の受け入れMSG .GetAssociatedAppointment(False) クラッシュ

上記のケースを区別して、設定されたステートメントで正しい基礎となるオブジェクトタイプを使用する方法はありますか?

ノート: デバッガーでEを検査しようとしています Set 常に生じます 「Outlookは問題に遭遇しており、閉鎖する必要があります...」

Private Function TimeOf(I As Object) As Date

Dim A As AppointmentItem
Dim M As MailItem
Dim E As MeetingItem
Dim T As TaskItem
Dim C As TaskRequestAcceptItem
Dim D As TaskRequestDeclineItem
Dim Q As TaskRequestItem
Dim U As TaskRequestUpdateItem

    Select Case TypeName(I)
    Case "AppointmentItem"
        Set A = I
        TimeOf = A.Start
        Set A = Nothing

    Case "MailItem"
        Set M = I
        TimeOf = M.ReceivedTime
        Set M = Nothing

    Case "MeetingItem"
        Set E = I
        Set A = E.GetAssociatedAppointment(False) ' doesn't work if item is a
                                                  ' response to an Appointment received
        TimeOf = A.Start                          ' <-- ERROR: Object variable ... not set
        Set E = Nothing
        Set A = Nothing

    Case "TaskItem"
        Set T = I
        TimeOf = T.Start
        Set T = Nothing

    Case "TaskRequestAcceptItem"
        Set C = I
        TimeOf = C.Start
        Set C = Nothing

    Case "TaskRequestDeclineItem"
        Set D = I
        TimeOf = D.Start
        Set D = Nothing

    Case "TaskRequestItem"
        Set Q = I
        TimeOf = Q.Start
        Set Q = Nothing

    Case "TaskRequestUpdateItem"
        Set U = I
        TimeOf = U.Start
        Set U = Nothing

    Case Else
        TimeOf = I.CreationTime
    End Select

End Function
役に立ちましたか?

解決

リクエストタイプのMeetingItemには、「ipm.schedule.meeting.request」のメッセージがあります。 MeetingItemのAcceptance-Typeには、「ipm.schedule.meeting.resp.pos」のメッセージがあります。ご参照ください ここ Outlook 2003の他のMessageClassの詳細については、Outlook 2007で次のコードをテストしました。それは正常に動作しています。

Private Function TimeOf(I As Object) As Date

Dim A As AppointmentItem
Dim M As MailItem
Dim E As MeetingItem
Dim T As TaskItem
Dim C As TaskRequestAcceptItem
Dim D As TaskRequestDeclineItem
Dim Q As TaskRequestItem
Dim U As TaskRequestUpdateItem

    Select Case TypeName(I)
    Case "AppointmentItem"
        Set A = I
        TimeOf = A.Start
        Set A = Nothing

    Case "MailItem"
        Set M = I
        TimeOf = M.ReceivedTime
        Set M = Nothing

    Case "MeetingItem"
        Set E = I
        If (E.MessageClass = "IPM.Schedule.Meeting.Request") Then
            ' Meeting Request
            Set A = E.GetAssociatedAppointment(False)
            TimeOf = A.Start
            Set A = Nothing
        Else
            ' Other MeetingItem
            TimeOf = E.ReceivedTime
        End If
        Set E = Nothing

    Case "TaskItem"
        Set T = I
        TimeOf = T.Start
        Set T = Nothing

    Case "TaskRequestAcceptItem"
        Set C = I
        TimeOf = C.Start
        Set C = Nothing

    Case "TaskRequestDeclineItem"
        Set D = I
        TimeOf = D.Start
        Set D = Nothing

    Case "TaskRequestItem"
        Set Q = I
        TimeOf = Q.Start
        Set Q = Nothing

    Case "TaskRequestUpdateItem"
        Set U = I
        TimeOf = U.Start
        Set U = Nothing

    Case Else
        TimeOf = I.CreationTime
    End Select

End Function
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top