Найти базовый тип объекта для Outlook MousteriTem

StackOverflow https://stackoverflow.com/questions/4365890

  •  09-10-2019
  •  | 
  •  

Вопрос

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

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

  • Назначение, где .GetAssociatedAppointment(False) кажется, работает нормально
  • Принятие MSG к полученной встрече, где .GetAssociatedAppointment(False) аварии

Любая идея, как различать вышеуказанные случаи для использования правильного типа нижнего объекта в заданном операторе?

Примечание: пытаясь проверить е в отладчике после того, как это было 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
Это было полезно?

Решение

Вместительный тип запроса имеет Messageclass «ipm.schedule.meeting.request». Прием тип насемений имеет сообщение «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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top