Trova sottostante tipo di oggetto per Outlook MeetingItem
-
09-10-2019 - |
Domanda
Sto usando VBA per MAPIFolders
scansione per Items
creato prima di una certa data, per spostarli in un PST archivio. Normalmente Item.CreationDate
è un gancio buona per la ricerca di "vecchi" elementi di Outlook, ma per il calendario voci la "data di creazione" può essere il modo prima della "data di inizio" così per le voci di calendario io invece voglio usare quest'ultimo.
Il mio problema è con il tipo MeetingItem
che può essere
- un appuntamento dove
.GetAssociatedAppointment(False)
sembra funzionare bene - un msg di accettazione per un appuntamento in cui ha ricevuto
.GetAssociatedAppointment(False)
crash
Qualsiasi idea di come distinguere tra i casi di cui sopra per utilizzare il tipo di oggetto sottostante corretto l'istruzione Set?
Nota: cercando di ispezionare E nel debugger dopo che è stato Set
sempre risultati in "Outlook ha riscontrato un problema e deve chiudere ..."
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
Soluzione
Una richiesta di tipo MeetingItem ha un MessageClass di "IPM.Schedule.Meeting.Request". L'accettazione-tipo di MeetingItem ha un MessageClass di "IPM.Schedule.Meeting.Resp.Pos". Si prega di fare riferimento qui per maggiori dettagli su altri MessageClass sulla prospettiva 2003. ho testato il seguente codice nel mio Outlook 2007. sta funzionando bene.
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