如何修改Access代码实现打开Outlook邮件后自动全部回复?
我有一个MS Access数据库,其中的控件按钮可打开服务器上保存的Outlook邮件文件,供所有人使用和回复。我希望点击该按钮时,打开邮件并自动执行全部回复操作。
查阅资料得知ActiveInspector.CurrentItem可实现打开邮件的功能,但我目前用ActiveExplorer实现的全部回复仅针对Outlook窗格中高亮的邮件,而非当前打开的邮件。以下是我基于ActiveExplorer编写的代码,请问如何修改为使用ActiveInspector,或实现对当前打开邮件的全部回复?Private Sub Command302_Click() Dim objApp As Outlook.Application Dim oExp As Outlook.Explorer Dim olItem As Outlook.MailItem Dim olReply As MailItem ' Reply Dim olRecip As Recipient ' Add Recipient FollowHyperlink Me.Text276 Set objApp = GetObject(, "Outlook.Application") Set oExp = objApp.ActiveExplorer For Each olItem In objApp.Application.ActiveExplorer.Selection Set olReply = olItem.ReplyAll Set olRecip = olReply.Recipients.add("me@email.com") ' Recipient Address olRecip.Type = olCC olReply.HTMLBody = "Test Response " & vbCrLf & olReply.HTMLBody olReply.Display Next olItem End Sub
解决方案
核心是通过ActiveInspector.CurrentItem直接获取当前打开的邮件窗口中的邮件对象,替换掉依赖资源管理器选中项的逻辑。修改后的代码如下:
Private Sub Command302_Click() Dim objApp As Outlook.Application Dim oInspector As Outlook.Inspector Dim olItem As Outlook.MailItem Dim olReply As MailItem Dim olRecip As Recipient Dim waitTime As Integer ' 打开服务器上的邮件文件 FollowHyperlink Me.Text276 ' 等待邮件窗口加载完成,可根据实际情况调整毫秒数 waitTime = 2000 Application.Wait Now() + TimeSerial(0, 0, waitTime / 1000) ' 获取Outlook应用实例 Set objApp = GetObject(, "Outlook.Application") ' 获取当前激活的邮件检查器(即打开的邮件窗口) Set oInspector = objApp.ActiveInspector ' 校验当前打开的是否为邮件项 If Not oInspector Is Nothing And TypeName(oInspector.CurrentItem) = "MailItem" Then Set olItem = oInspector.CurrentItem ' 执行全部回复 Set olReply = olItem.ReplyAll ' 添加CC收件人 Set olRecip = olReply.Recipients.Add("me@email.com") olRecip.Type = olCC ' 修正HTML换行,用<br>替代vbCrLf olReply.HTMLBody = "Test Response <br>" & olReply.HTMLBody ' 显示回复窗口 olReply.Display ' 释放对象 Set olRecip = Nothing Set olReply = Nothing Set olItem = Nothing End If Set oInspector = Nothing Set objApp = Nothing End Sub
关键修改说明
- 替换
ActiveExplorer为ActiveInspector:直接定位到当前打开的邮件窗口,不再依赖资源管理器的选中内容 - 添加窗口等待逻辑:
FollowHyperlink打开邮件需要加载时间,必须等窗口完全打开后才能获取有效ActiveInspector对象 - 修正HTML换行:原代码的
vbCrLf在HTML格式邮件中不生效,换成HTML标准的<br>标签才能正确换行 - 增加类型校验:避免因打开非邮件类型窗口导致的运行时错误
内容的提问来源于stack exchange,提问作者RJBJR
相关产品推荐
相关产品推荐

