Outlook MeetingItemの基礎となるオブジェクトタイプを見つけます
-
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
所属していません StackOverflow