如何为无需回复的Outlook约会请求设置日历项类别?
问题:Outlook VBA无法为无需回复的会议邀请设置日历项类别
我用VBA自动接受特定日历邀请,对于要求回复的邀请,能通过脚本接受并发送回复,同时给日历副本设置类别。但尝试给无需回复的邀请设置类别时,直接设置cAppt.Categories = "xxxx"没有效果——因为这类邀请不会生成MeetingItem,修改关联的AppointmentItem不生效。
原尝试代码:
For x = Application.ActiveWindow.Selection.Count To 1 Step -1 If (Application.ActiveWindow.Selection.Item(x).MessageClass = "IPM.Schedule.Meeting.Request") Then Set cAppt = Application.ActiveWindow.Selection.Item(x).GetAssociatedAppointment(True) Set oRequest = cAppt.Respond(olMeetingAccepted, True) If cAppt.ResponseRequested = True Then oRequest.Send oRequest.Categories = "xxxx" Else cAppt.Categories = "xxxx" End If End If Next x
解决方案
问题核心:无需回复的邀请调用Respond后,对AppointmentItem的修改不会自动保存,必须手动执行保存操作才能让类别设置生效。另外需要注意,无需回复场景下Respond方法会返回Nothing,无需处理发送逻辑。
修正后的代码:
For x = Application.ActiveWindow.Selection.Count To 1 Step -1 Dim selItem As Object Set selItem = Application.ActiveWindow.Selection.Item(x) If selItem.MessageClass = "IPM.Schedule.Meeting.Request" Then Set cAppt = selItem.GetAssociatedAppointment(True) Set oRequest = cAppt.Respond(olMeetingAccepted, True) If cAppt.ResponseRequested Then oRequest.Categories = "xxxx" oRequest.Send Else cAppt.Categories = "xxxx" ' 关键步骤:手动保存日历项,确保类别设置生效 cAppt.Save End If End If Next x
逻辑说明
- 需回复邀请:
oRequest是生成的MeetingItem,设置类别后发送即可,发送操作会自动同步类别到日历副本。 - 无需回复邀请:
Respond仅标记邀请为已接受,对AppointmentItem的类别修改需要调用cAppt.Save才能持久化到日历中。
内容的提问来源于stack exchange,提问作者Adam J. Kessel
相关产品推荐
相关产品推荐

