2010-12-06 17 views
2

Ich verwende VBA zu scannen MAPIFolders für Items vor einem bestimmten Datum erstellt, um sie in ein Archiv PST verschieben. Normalerweise ist Item.CreationDate ein guter Haken, um nach "alten" Outlook-Elementen zu suchen, aber bei Kalendereinträgen kann das "Erstellungsdatum" weit vor dem "Startdatum" liegen, so dass ich für Kalendereinträge eher letzteres verwenden möchte.Finden Sie zugrunde liegenden Objekttyp für Outlook MeetingItem

Mein Problem ist mit Typ MeetingItem die

  • ein Termin sein kann, wo .GetAssociatedAppointment(False) scheint in Ordnung
  • eine Abnahme msg auf eine empfangene Termin zu arbeiten, wo .GetAssociatedAppointment(False) Abstürze

Irgendeine Idee, wie man Unterscheiden Sie zwischen den obigen Fällen, um den korrekten zugrunde liegenden Objekttyp in der Set-Anweisung zu verwenden?

Hinweis: versuchen, E im Debugger zu untersuchen, nachdem es Set gewesen führt immer in "Outlook hat ein Problem festgestellt und muss beendet ..."

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 

Antwort

1

Eine Anfrage-Typ MeetingItem hat eine MessageClass von "IPM.Schedule.Meeting.Request". Ein Akzeptanztyp von MeetingItem hat eine MessageClass von "IPM.Schedule.Meeting.Resp.Pos". Weitere Informationen zu anderen MessageClass auf Outlook 2003 finden Sie unter here. Ich habe den folgenden Code in Outlook 2007 getestet. Es funktioniert einwandfrei.

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 
+0

Hallo und danke für Ihre Antwort; Entschuldigung, ich kann jetzt nicht testen, da ich in Chtristmas Ferien bin, aber ich vertraue deinen Erklärungen und akzeptiere deine Lösung. Wird Anfang Januar auf die Ergebnisse zurückkommen. Jahreszeit Grüße - MikeD – MikeD

Verwandte Themen