Excel VBA调用Outlook定时发邮件.Send报287错误,求排查原因
解决Excel VBA发送Outlook邮件时的287应用程序错误
我之前也碰到过一模一样的287错误,结合你的情况——代码在同事机器上能正常跑,你也一直开着Outlook——大概率是你的Outlook或Excel的安全/权限设置出了问题,给你几个针对性的排查和解决步骤:
1. 开启Excel对VBA项目对象模型的访问(最常见原因)
这个设置是很多人忽略的,也是导致287错误的头号元凶:
- 打开Excel,点击「文件」>「选项」>「信任中心」>「信任中心设置」
- 选择「宏设置」,勾选信任对VBA项目对象模型的访问
- 重启Excel后再运行代码试试
2. 检查Outlook的信任中心与默认客户端设置
- 打开Outlook,进入「文件」>「选项」>「信任中心」>「信任中心设置」
- 选择「程序访问」,确保「电子邮件」选项里选中的是Microsoft Outlook,不是其他邮件客户端
- 再看「电子邮件安全」,临时取消勾选「不允许自动下载图片或其他可能隐藏病毒的内容」(测试完记得改回去,安全第一)
- 确认Outlook是默认邮件客户端:打开控制面板>「程序」>「默认程序」>「设置默认程序」,找到Outlook并设为默认
3. 尝试以管理员身份运行Excel
有时候系统权限不足也会导致VBA无法调用Outlook的发送功能:
- 右键Excel图标,选择「以管理员身份运行」,打开你的工作簿后再执行代码
4. 修复Office安装(终极方案)
如果上面的步骤都没用,可能是Office组件损坏了:
- 打开控制面板>「程序和功能」,找到你的Microsoft Office套件
- 右键选择「更改」,然后选「联机修复」,等待修复完成后重启电脑
给你代码加个错误处理(方便后续排查)
可以在你的代码里加上错误捕获,这样下次出错能看到更详细的信息:
Sub Send_Email() Dim sh As Worksheet Set sh = ThisWorkbook.Sheets("Sheet1") '''''''''' Update Next '''''''''''''' Call Update_Next_Schedule_Time Application.OnTime sh.Range("K20").Value, "Send_Email" '''''''''''''''''''''''''''''''''''''' Dim oa As Object Dim msg As Object On Error GoTo ErrorHandler ' 添加错误捕获 Set oa = CreateObject("outlook.application") Set msg = oa.createitem(0) With msg .To = sh.Range("C2").Value .CC = sh.Range("C4").Value .Subject = sh.Range("C6").Value .Body = sh.Range("C8").Value .Display .Send End With Exit Sub ErrorHandler: MsgBox "错误代码: " & Err.Number & vbCrLf & "错误信息: " & Err.Description, vbCritical End Sub
内容的提问来源于stack exchange,提问作者SNEHA
相关产品推荐
相关产品推荐

