Pregunta

Estoy utilizando VBA para MAPIFolders exploración para Items creado antes de una fecha determinada con el fin de moverlos a un PST archivo. Normalmente Item.CreationDate es un gancho bueno para explorar en busca de "viejos" elementos de Outlook, pero para entradas de calendario la "fecha de creación" puede ser mucho antes de la "fecha de inicio" por lo que para las entradas de calendario que en lugar quiero utilizar este último.

Mi problema es con el tipo MeetingItem que puede ser

  • una cita donde .GetAssociatedAppointment(False) parece bien el trabajo
  • msg una aceptación a una cita donde recibió .GetAssociatedAppointment(False) accidentes

¿Alguna idea de cómo distinguir entre los casos anteriores para utilizar el tipo de objeto subyacente correcto en la instrucción Set?

Nota: tratando de inspeccionar E en el depurador después de que ha sido Set siempre resulta en "Outlook ha detectado un problema y debe cerrarse ..."

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
¿Fue útil?

Solución

A-tipo de solicitud MeetingItem tiene un MessageClass de "IPM.Schedule.Meeting.Request". Un tipo aceptación de MeetingItem tiene un MessageClass de "IPM.Schedule.Meeting.Resp.Pos". Por favor, consulte aquí para obtener más detalles sobre otros MessageClass en Outlook 2003. he probado el código siguiente en mi Outlook 2007. está funcionando 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top