Найти базовый тип объекта для Outlook MousteriTem
-
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