【问题标题】:Find underlying Object Type for Outlook MeetingItem查找 Outlook MeetingItem 的基础对象类型
【发布时间】: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

【问题讨论】:

    标签: vba outlook


    【解决方案1】:

    请求类型的 MeetingItem 具有“IPM.Schedule.Meeting.Request”的 MessageClass。 MeetingItem 的接受类型具有“IPM.Schedule.Meeting.Resp.Pos”的MessageClass。有关 Outlook 2003 上其他 MessageClass 的更多详细信息,请参阅 here。我在 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
    

    【讨论】:

    • 您好,感谢您的回复;抱歉,由于圣诞节假期,我现在无法测试,但我相信您的解释,因此接受您的解决方案。将在一月初发布结果。季节问候 - MikeD
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    相关资源
    最近更新 更多