Question

J'utilise VBA pour analyse MAPIFolders pour Items créé avant une certaine date afin de les déplacer vers un PST archive. Normalement Item.CreationDate est un bon crochet pour rechercher « vieux » éléments Outlook, mais pour le calendrier des entrées de la « date de création » peut être bien avant la « date de début » donc pour les entrées d'agenda, je veux plutôt utiliser ce dernier.

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

  • un rendez-vous où .GetAssociatedAppointment(False) semble fonctionner correctement
  • une acceptation msg à un rendez-vous reçu où .GetAssociatedAppointment(False) accidents

Toute idée de comment faire la distinction entre les cas ci-dessus pour utiliser le bon type d'objet sous-jacent dans l'instruction Set?

Remarque: en essayant d'inspecter E dans le débogueur après qu'il a été Set toujours des résultats dans "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
Était-ce utile?

La solution

A-type de demande MeetingItem a un MessageClass de "IPM.Schedule.Meeting.Request". Un type d'acceptation de-MeetingItem a un MessageClass de "IPM.Schedule.Meeting.Resp.Pos". S'il vous plaît consulter pour plus de détails sur autres MessageClass sur outlook 2003. J'ai testé le code suivant dans mon outlook 2007. Il 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top