Найти базовый тип объекта для Outlook MeetingItem - PullRequest
2 голосов
/ 06 декабря 2010

Я использую VBA для сканирования MAPIFolders на Items, созданных до определенной даты, чтобы переместить их в архив PST.Обычно Item.CreationDate является хорошим средством для поиска «старых» элементов Outlook, но для записей календаря «дата создания» может быть намного раньше «даты начала», поэтому для записей календаря я скорее хочу использовать последний.

Моя проблема связана с типом MeetingItem, который может быть

  • назначением, при котором .GetAssociatedAppointment(False), кажется, работает нормально
  • сообщением о приеме принятого назначения, где .GetAssociatedAppointment(False)сбои

Есть идеи, как отличить вышеприведенные случаи, чтобы использовать правильный тип базового объекта в операторе Set?

Примечание: пытается проверить E вотладчик после того, как он был Set, всегда приводит к "Outlook столкнулся с проблемой и должен быть закрыт ..."

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

1 Ответ

1 голос
/ 18 декабря 2010

Тип запроса MeetingItem имеет класс MessageClass «IPM.Schedule.Meeting.Request». Тип принятия MeetingItem имеет класс MessageClass «IPM.Schedule.Meeting.Resp.Pos». Пожалуйста, обратитесь здесь для более подробной информации о других MessageClass на Outlook 2003. Я тестировал следующий код в моем Outlook 2007. Он работает нормально.

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
...