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

Access调用Outlook发邮件To字段报错:运行时错误'424'对象要求

解决Access VBA批量发送邮件时收件人字段的运行时错误'424'

运行时错误'424'(对象要求)出现在.To = Table1.Email2这一行,核心原因是不能直接通过表名+字段名的方式获取当前记录的邮箱值——你已经通过DAO.Recordset打开了目标数据集,必须从当前遍历的记录集对象rs中读取对应字段。

修正后的完整代码

'code for sending outlook email as a reminder 
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("select * from Table1 where Table1.Fieldx = ""No"" and (Date() +3 > Table1.duedate)")
    
'checking if the recordset has data
If Not (rs.EOF And rs.BOF) Then
    '将Outlook对象创建移到循环外,避免重复创建销毁,提升效率
    Dim O As Outlook.Application
    Dim M As Outlook.MailItem
    Set O = New Outlook.Application
    
    rs.MoveFirst
    Do Until rs.EOF = True
            
        Dim Msg As String
        Msg = "Dear " & Forms!FormSample.AssignTo & ",<P>" & _
        "An email will be sent in 2 days (" & (Date + 2) & ").<P>" & _
        "Regards, "
    
        Set M = O.CreateItem(olMailItem)
        
        With M
            .BodyFormat = olFormatHTML
            .HTMLBody = Msg
            .To = rs!Email2   '修改点:从当前记录集rs中读取Email2字段值
            .Subject = "Testing access sending auto email " & Now()
            .Send
        End With
        Set M = Nothing
        
        rs.MoveNext '关键:遍历完一条记录后必须移动到下一条,否则会无限循环
    Loop
    
    Set O = Nothing
Else
    MsgBox "there are no records in the recordset"
End If

关键修改说明

  • 收件人字段修正:将.To = Table1.Email2改为.To = rs!Email2(或.To = rs("Email2"),两种写法等价),通过当前记录集rs获取对应记录的邮箱值,这是解决错误的核心。
  • 添加记录移动语句:原代码缺少rs.MoveNext,会导致循环一直停留在第一条记录,无限发送邮件,必须添加该语句完成记录遍历。
  • 优化Outlook对象创建:将Outlook应用对象O的创建移到循环外部,避免每次循环都重复初始化和销毁对象,既节省资源又减少Outlook安全提示触发概率。

额外提示

如果邮件内容中的AssignTo是对应每条记录的收件人姓名,建议同样从rs中读取(比如rs!AssignTo),而非固定引用窗体控件,这样批量发送的邮件内容会更贴合每条记录的实际情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:50:09