Domanda

Sto usando VBA per MAPIFolders scansione per Items creato prima di una certa data, per spostarli in un PST archivio. Normalmente Item.CreationDate è un gancio buona per la ricerca di "vecchi" elementi di Outlook, ma per il calendario voci la "data di creazione" può essere il modo prima della "data di inizio" così per le voci di calendario io invece voglio usare quest'ultimo.

Il mio problema è con il tipo MeetingItem che può essere

  • un appuntamento dove .GetAssociatedAppointment(False) sembra funzionare bene
  • un msg di accettazione per un appuntamento in cui ha ricevuto .GetAssociatedAppointment(False) crash

Qualsiasi idea di come distinguere tra i casi di cui sopra per utilizzare il tipo di oggetto sottostante corretto l'istruzione Set?

Nota: cercando di ispezionare E nel debugger dopo che è stato Set sempre risultati in "Outlook ha riscontrato un problema e deve chiudere ..."

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
È stato utile?

Soluzione

Una richiesta di tipo MeetingItem ha un MessageClass di "IPM.Schedule.Meeting.Request". L'accettazione-tipo di MeetingItem ha un MessageClass di "IPM.Schedule.Meeting.Resp.Pos". Si prega di fare riferimento qui per maggiori dettagli su altri MessageClass sulla prospettiva 2003. ho testato il seguente codice nel mio Outlook 2007. sta funzionando bene.

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top