2010-12-06 19 views
2

J'utilise VBA pour analyser MAPIFolders pour Items créé avant une certaine date afin de les déplacer vers une archive PST. Normalement, Item.CreationDate est un bon point d'accès pour rechercher les "anciens" éléments Outlook, mais pour les entrées d'agenda, la "date de création" peut être bien antérieure à la "date de début".Rechercher le type d'objet sous-jacent pour Outlook MeetingItem

Mon problème est avec le type MeetingItem qui peut être

  • un rendez-vous où .GetAssociatedAppointment(False) semble fonctionner très bien
  • un msg d'acceptation à un rendez-vous reçu où .GetAssociatedAppointment(False) accidents

Toute idée comment distinguer entre les cas ci-dessus pour utiliser le type d'objet sous-jacent correct dans l'instruction Set?

Note: essayant d'inspecter E dans le débogueur après qu'il a été Set résultats toujours "Outlook a rencontré un problème et doit fermer ..."

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 

Répondre

1

A MeetingItem type de demande a une classe MessageClass de "IPM.Schedule.Meeting.Request". Un type d'acceptation de MeetingItem a une classe MessageClass de "IPM.Schedule.Meeting.Resp.Pos". S'il vous plaît se référer here pour plus de détails sur d'autres MessageClass sur Outlook 2003. J'ai testé le code suivant dans mon Outlook 2007. Cela fonctionne très bien.

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

Bonjour et merci pour votre réponse; désolé je ne peux pas tester maintenant que je suis en vacances Chtristmas, mais je fais confiance à vos explications et donc accepter votre solution. Reviendra sur les résultats au début de Janvier. Salutations de saison - MikeD – MikeD