求助: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
关键修改说明
- 变量优化:用
DelDateTime变量直接存储完整日期时间,替代原代码拆分的日期、小时、分钟变量,简化逻辑。 - 正确构建延迟时间:利用Excel的数值特性,将日期单元格和时间单元格的值相加,生成符合
DeferredDeliveryTime要求的Date类型数据。 - 补充保存/发送操作:调用
.Save将邮件存入草稿箱,或用.Send直接触发延迟发送逻辑,确保设置的延迟时间生效。
额外注意事项
- 确保Outlook处于运行状态,或代码能正常启动Outlook进程。
- 若使用
.Send,需确认Outlook信任中心允许VBA自动发送邮件,避免被安全拦截。
内容的提问来源于stack exchange,提问作者Pom
相关产品推荐
相关产品推荐

