首页 > 解决方案 > 如何捕获我对会议邀请的回复?

问题描述

当我回复发送到我的一个非默认电子邮件帐户的会议邀请时,Outlook 会从默认帐户而不是邀请发送到的帐户发送回复。

我尝试使用该ItemLoad事件来捕获这种情况并设置一个MailItem要在事件中使用的对象MailItem.Reply。我在下面的这行代码中收到一条类型错误消息Set NonDefaultMailboxMtgMsg = myObj

如何设置NonDefaultMailboxMtgMsg会议请求的相应MailItem对象,以便触发回复事件?

Public WithEvents NonDefaultMailboxMtgMsg As MailItem
Dim MeetingReplyDisplayName As String


Private Sub Application_ItemLoad(ByVal Item As Object)
    
    Dim myObj As Variant
    Set myObj = GetCurrentItem()
      
    If myObj.Class = olMeetingRequest And myObj.Parent.Store.DisplayName _
     <> Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Parent.Store.DisplayName Then
     
        Set NonDefaultMailboxMtgMsg = myObj
        MeetingReplyDisplayName = myObj.Parent.Store.DisplayName
    End If
End Sub

Private Sub NonDefaultMailboxMtgMsg_Reply(ByVal Response As Object, Cancel As Boolean)
        Response.SendUsingAccount = MeetingReplyDisplayName
End Sub

Function GetCurrentItem() As Object
    Dim objApp As Outlook.Application
         
    Set objApp = Application
    On Error Resume Next
    Select Case TypeName(objApp.ActiveWindow)
        Case "Explorer"
            Set GetCurrentItem = objApp.ActiveExplorer.Selection.Item(1)
        Case "Inspector"
            Set GetCurrentItem = objApp.ActiveInspector.CurrentItem
    End Select
     
    Set objApp = Nothing
End Function

标签: vbaoutlook

解决方案


收到的项目类型是一个会议请求 (olMeetingRequest),它是一个 MeetingItem。

Public WithEvents NonDefaultMailboxMtgMsg As MailItem不匹配,因此您在Set NonDefaultMailboxMtgMsg = myObj.

而是使用Public WithEvents NonDefaultMailboxMtgMsg As MeetingItem.


示例代码演示点击响应然后回复时触发事件。

Public WithEvents NonDefaultMailboxMtgMsg As MeetingItem

Dim MeetingReplyDisplayName As String

Private Sub Application_ItemLoad(ByVal Item As Object)
    
    Debug.Print
    Debug.Print "Procedure.......: Application_ItemLoad"
    Debug.Print " TypeName(Item).: " & TypeName(Item)
    
    Dim myObj As Object
    Set myObj = GetCurrentItem()
    Debug.Print " TypeName(myObj): " & TypeName(myObj)
    
    If myObj.Class = olMeetingRequest Then
        If myObj.Parent.Store.DisplayName <> GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Parent.Store.DisplayName Then
            Set NonDefaultMailboxMtgMsg = myObj
            MeetingReplyDisplayName = myObj.Parent.Store.DisplayName
        End If
    End If
    
End Sub

Private Sub NonDefaultMailboxMtgMsg_Reply(ByVal Response As Object, Cancel As Boolean)
    Debug.Print
    Debug.Print "Procedure.........................: NonDefaultMailboxMtgMsg_Reply"
    Debug.Print " TypeName(NonDefaultMailboxMtgMsg): " & TypeName(NonDefaultMailboxMtgMsg)
    Debug.Print " TypeName(Response)...............: " & TypeName(Response)
    MsgBox "Reply event triggered"
End Sub

Function GetCurrentItem() As Object
    
    Select Case TypeName(ActiveWindow)
    
        Case "Explorer"
            On Error Resume Next
            Set GetCurrentItem = ActiveExplorer.Selection.Item(1)
            On Error GoTo 0
            
        Case "Inspector"
            Set GetCurrentItem = ActiveInspector.currentItem
            
    End Select
     
End Function

推荐阅读