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

使用MS Access VBA发送Outlook邮件遇对象定义错误求助

Access VBA发送Outlook邮件报错解决方案

问题分析

  • 执行.ReplyRecipients.Add触发“Application-defined or object-defined error”:ReplyRecipients属性仅针对已接收的邮件(用于添加回复收件人),新建的邮件(olMailItem类型)不支持该属性,这是核心错误原因。
  • 注释该行后.Send仍报错:大概率是Outlook安全策略拦截,或收件人设置逻辑存在问题。

修正方案

1. 移除错误的ReplyRecipients.Add调用

新建邮件无需设置ReplyRecipients,若需指定回复地址,改用.ReplyTo属性即可。

2. 调整代码适配新建邮件逻辑

以下是修正后的完整代码:

Sub TestSend()
    Call SendEmailOutlook("myemail@email.com", "Test message", "Test message.")
End Sub

Public Sub SendEmailOutlook(strTo As String, strSubject As String, strBody As String)
    
    On Error GoTo SendEmailOutlookErr
    
    Dim oLook As Outlook.Application ' 早期绑定(已添加Outlook引用)
    Dim oMail As Outlook.MailItem
    
    Set oLook = New Outlook.Application
    Set oMail = oLook.CreateItem(olMailItem) ' 用常量olMailItem替代数字0,可读性更强
    With oMail
        .To = strTo
        .ReplyTo = "myemail@email.com" ' 如需指定回复地址,使用该属性
        .HTMLBody = strBody
        .Subject = strSubject
        .Display ' 先测试显示邮件,确认内容正常后再替换为.Send
        '.Send
    End With
    
Cleanup:
    Set oMail = Nothing
    Set oLook = Nothing
    Exit Sub
    
SendEmailOutlookErr:
    MsgBox Err.Description, vbOKOnly, Err.Source & ":" & Err.Number
    Resume Cleanup
End Sub

3. 解决.Send报错的安全问题

若.Send仍报错,按以下步骤排查:

  • 打开Outlook,进入文件>选项>信任中心>信任中心设置>程序访问,确保允许Access等程序访问Outlook邮件功能。
  • 针对Outlook 2016及以上版本,可能需要管理员调整组策略启用低级别访问权限,或通过Outlook VBA签名验证绕过安全拦截。
  • 先使用.Display手动发送确认邮件内容、收件人正常后,再尝试自动发送。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:00:57