【发布时间】:2020-06-28 16:01:52
【问题描述】:
我正在使用 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
【问题讨论】: