vba - 如何捕获我对会议邀请的回复?
问题描述
当我回复发送到我的一个非默认电子邮件帐户的会议邀请时,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
解决方案
收到的项目类型是一个会议请求 (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
推荐阅读
- dart - 扑扑为什么会被解雇两次?
- python - 运行 eval.py tensorflow 对象检测 api 时出错
- azure-iot-edge - 在模块中利用 IoT SDK,传播到设备
- c# - 如何在不导出到磁盘的情况下在新选项卡上预览 PDF 格式的 Crystal Report
- javascript - String.split 与正则表达式错误
- php - 如何获取特征组成的特征列表
- javascript - 将 javascript 移动到外部脚本开始导致错误
- node.js - Axios.delete() 未按预期触发
- javascript - 如何获得具有固定总和和大小的随机数列表
- apache-spark - 使用 Apache Spark 的代理键