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

求助:VBA设置Outlook定时邮件发送遇Run-time error 440错误

Outlook VBA延迟发送邮件报错440的解决方法

问题根源

报错“Run-time error 440: 对象不支持该方法/属性”核心原因有两个:

  • DeferredDeliveryTime属性赋值类型错误:原代码用字符串拼接DelDate & DelHour给该属性赋值,但该属性要求传入标准Date类型的完整日期时间值,类型不匹配直接触发报错。
  • 未执行邮件保存/发送操作:仅设置延迟时间但不完成保存或发送动作,属性设置无法生效,也会引发对象状态相关的错误。

修复后的代码

Sub RectangleRoundedCorners4_Click()
    Dim OutlookApplication As Object
    Dim OutlookMail As Object
    Dim ws As Worksheet
    Dim Ads As String
    Dim Subj As String
    Dim Body As String
    Dim DelDateTime As Date ' 存储完整的延迟发送日期时间

    Set OutlookApplication = CreateObject("Outlook.Application")
    Set OutlookMail = OutlookApplication.CreateItem(0)
    Set ws = ActiveSheet
    
    Ads = ws.Cells(4, 2).Value
    Subj = ws.Cells(7, 2).Value
    Body = ws.Cells(4, 9).Value
    ' 直接合并日期和时间单元格的值(Excel中日期/时间均为数值类型,相加即完整时间)
    DelDateTime = ws.Cells(10, 6).Value + ws.Cells(12, 6).Value
   
    With OutlookMail
        .To = Ads
        .CC = ""
        .BCC = ""
        .Subject = "REMINDER: " & Subj
        .Body = Body
        .DeferredDeliveryTime = DelDateTime ' 传入正确的Date类型值
        .Save ' 保存到草稿箱(需手动发送场景),或替换为.Send直接设置延迟发送
    End With
   
    Set OutlookMail = Nothing
    Set OutlookApplication = Nothing
End Sub

关键修改说明

  1. 变量优化:用DelDateTime变量直接存储完整日期时间,替代原代码拆分的日期、小时、分钟变量,简化逻辑。
  2. 正确构建延迟时间:利用Excel的数值特性,将日期单元格和时间单元格的值相加,生成符合DeferredDeliveryTime要求的Date类型数据。
  3. 补充保存/发送操作:调用.Save将邮件存入草稿箱,或用.Send直接触发延迟发送逻辑,确保设置的延迟时间生效。

额外注意事项

  • 确保Outlook处于运行状态,或代码能正常启动Outlook进程。
  • 若使用.Send,需确认Outlook信任中心允许VBA自动发送邮件,避免被安全拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:45:43