Frage

Ich bin mit VBA zu Scan MAPIFolders für Items vor einem bestimmten Datum erstellt, um sie zu einem Archiv PST zu verschieben. Normalerweise Item.CreationDate ist ein guter Haken für „alte“ Outlook-Elemente zu scannen, sondern für den Kalender das „Erstellungsdatum“ -Einträge können Art und Weise sein, bevor die „Startdatum“ so für Kalendereinträge ich eher das letztere verwendet werden soll.

Mein Problem ist mit Typ MeetingItem welche sein

  • einen Termin, wo .GetAssociatedAppointment(False) zu funktionieren scheint,
  • eine Abnahme msg auf eine empfangene Termin wo .GetAssociatedAppointment(False) Abstürze

Jede Idee, wie zwischen den oben genannten Fällen zu unterscheiden, den richtigen zugrunde liegenden Objekttyp in der Set-Anweisung zu benutzen?

Hinweis: versuchen, E im Debugger zu untersuchen, nachdem es Set gewesen ist immer Ergebnisse in "Outlook hat ein Problem und muss beendet werden begegnet ..."

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
War es hilfreich?

Lösung

A request-type MeetingItem has a MessageClass of "IPM.Schedule.Meeting.Request". An acceptance-type of MeetingItem has a MessageClass of "IPM.Schedule.Meeting.Resp.Pos". Please refer here for more details on other MessageClass on Outlook 2003. I tested the following code in my Outlook 2007. It's working fine.

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top