You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:30:04