Finden zugrunde liegenden Objekttyp für Outlook MeetingItem
-
09-10-2019 - |
Frage
Ich bin mit VBA zu Scan MAPIFolders
für Items
vor einem bestimmten Datum erstellt, um sie zu einem Archiv PST zu verschieben. Normalerweise Item.CreationDate
ist ein guter Haken für „alte“ Outlook-Elemente zu scannen, sondern für den Kalender das „Erstellungsdatum“ -Einträge können Art und Weise sein, bevor die „Startdatum“ so für Kalendereinträge ich eher das letztere verwendet werden soll.
Mein Problem ist mit Typ MeetingItem
welche sein
- einen Termin, wo
.GetAssociatedAppointment(False)
zu funktionieren scheint, - eine Abnahme msg auf eine empfangene Termin wo
.GetAssociatedAppointment(False)
Abstürze
Jede Idee, wie zwischen den oben genannten Fällen zu unterscheiden, den richtigen zugrunde liegenden Objekttyp in der Set-Anweisung zu benutzen?
Hinweis: versuchen, E im Debugger zu untersuchen, nachdem es Set
gewesen ist immer Ergebnisse in "Outlook hat ein Problem und muss beendet werden begegnet ..."
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
Lösung
A request-type MeetingItem has a MessageClass of "IPM.Schedule.Meeting.Request". An acceptance-type of MeetingItem has a MessageClass of "IPM.Schedule.Meeting.Resp.Pos". Please refer here for more details on other MessageClass on Outlook 2003. I tested the following code in my Outlook 2007. It's working fine.
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