Я использую 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