使用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
相关产品推荐
相关产品推荐

