Outlook VSTO Add-in VB开发:如何读取收件箱已打开邮件的主题?
解决Outlook VSTO插件读取已打开邮件主题的问题
错误原因分析
- 非共享成员引用错误:直接通过
Microsoft.Office.Interop.Outlook.Application类调用ActiveInspector()是错误的,ActiveInspector是实例方法,必须通过Outlook应用的实例对象调用,VSTO插件中应使用ThisAddIn.Application获取当前Outlook应用实例。 - 代码逻辑顺序问题:原代码在判断
oInspector是否为空前就尝试获取CurrentItem,会触发空引用异常,需先判断inspector是否存在再处理邮件项。 - 关于ActiveInspector的误解:
ActiveInspector不仅适用于撰写中的邮件,也能捕获收件箱中已打开的查看状态邮件窗口,只要该窗口是当前激活的inspector窗口。
修正后的代码
Dim oInspector As Outlook.Inspector Dim targetMail As Outlook.MailItem ' 使用VSTO提供的Outlook应用实例获取当前激活的Inspector oInspector = ThisAddIn.Application.ActiveInspector() ' 先判断Inspector是否存在,再处理邮件主题 If oInspector Is Nothing Then MsgBox("没有打开的邮件窗口") Else ' 确保当前Inspector中的项是邮件类型,避免类型转换错误 If TypeOf oInspector.CurrentItem Is Outlook.MailItem Then targetMail = CType(oInspector.CurrentItem, Outlook.MailItem) AddEmailSubjectTextBox.Text = targetMail.Subject Else MsgBox("当前打开的不是邮件项") End If End If
额外说明
- 加入
TypeOf判断是为了避免当前打开日历、联系人等非邮件类型Outlook项时出现错误。 - 若需获取选中但未打开的收件箱邮件主题,可改用
ThisAddIn.Application.ActiveExplorer().Selection处理选中项集合。
内容的提问来源于stack exchange,提问作者wdb0035
相关产品推荐
相关产品推荐

