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

更新旧程序时Outlook 365邮件发送遇Runtime error 2046及引用问题求助

问题解决指南

一、修复DoCmd.SendObject的运行错误

Runtime error 2046通常由环境限制或配置问题导致,对应解决办法:

  • 检查Access版本限制:如果使用Access Runtime版本,部分功能会被禁用,需改用完整版Access,或更换邮件发送方式。
  • 验证Outlook配置与权限:确保本地已正确安装并登录Outlook 365,同时检查Office安全设置:打开Outlook「文件」>「选项」>「信任中心」>「信任中心设置」>「宏设置」,启用对VBA宏的信任(注意防范安全风险)。
  • 修正代码参数:代码中varCC未赋值,虽允许空值,但显式设为Null可避免潜在问题,修改后代码:
Public Function SendEmail2()
    Dim varName As Variant
    Dim varCC As Variant
    Dim varSubject As Variant
    Dim varBody As Variant
    varName = "johnsullivanbnm@gmail.com"
    varCC = Null ' 显式设置为空参数
    varSubject = "Hello"
    varBody = "Let's go"
    DoCmd.SendObject , , , varName, varCC, , varSubject, varBody, True, False
End Function

二、无需引用的邮件发送方法(Late Binding)

这种方式不需要提前添加Outlook引用,兼容性更强,代码示例:

Public Function SendEmailWithoutReference()
    Dim outlookApp As Object
    Dim outlookMail As Object
    
    ' 创建Outlook实例
    Set outlookApp = CreateObject("Outlook.Application")
    Set outlookMail = outlookApp.CreateItem(0) ' 0代表邮件项
    
    With outlookMail
        .To = "johnsullivanbnm@gmail.com"
        .CC = ""
        .Subject = "Hello"
        .Body = "Let's go"
        .Display ' 显示邮件窗口,需直接发送可改为.Send
    End With
    
    ' 释放对象资源
    Set outlookMail = Nothing
    Set outlookApp = Nothing
End Function

三、本地Outlook 365的引用位置

若需添加早期绑定引用(Early Binding),操作步骤:

  1. 在VBA编辑器中点击「工具」>「引用」。
  2. 在引用列表中找到Microsoft Outlook 16.0 Object Library(Outlook 365对应版本号通常为16.0),勾选后确定。
  3. 若列表中无该选项,可手动浏览路径:
    • 64位Office:C:\Program Files\Microsoft Office\root\Office16\MSOUTL.OLB
    • 32位Office:C:\Program Files (x86)\Microsoft Office\root\Office16\MSOUTL.OLB

内容的提问来源于stack exchange,提问作者JoSu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:05:02