Outlook 365延迟发送VBA如何取消发件箱待发邮件并重新编辑?
报错根因
你编写的移动代码错误将草稿箱识别为收件箱的子文件夹,Outlook 中草稿箱是独立的默认文件夹,无需从收件箱目录下查找,路径匹配失败直接触发「找不到对象」报错。
修复后的可运行代码
基础修复版(移动所有发件箱待发邮件到草稿箱)
Sub MoveAllOutboxToDrafts() Dim OutboxFolder As Outlook.Folder Dim DraftsFolder As Outlook.Folder Dim CurrentItem As Object Dim oNS As Outlook.NameSpace ' 初始化MAPI命名空间 Set oNS = Application.GetNamespace("MAPI") ' 直接获取默认发件箱、草稿箱 Set OutboxFolder = oNS.GetDefaultFolder(olFolderOutbox) Set DraftsFolder = oNS.GetDefaultFolder(olFolderDrafts) ' 遍历移动所有发件箱邮件 For Each CurrentItem In OutboxFolder.Items If TypeOf CurrentItem Is Outlook.MailItem Then ' 清除延迟投递配置,避免后续发送再次触发延迟 CurrentItem.DeferredDeliveryTime = #1/1/4501# ' Outlook 约定该值表示无延迟投递 CurrentItem.Move DraftsFolder End If Next CurrentItem ' 释放对象 Set CurrentItem = Nothing Set DraftsFolder = Nothing Set OutboxFolder = Nothing Set oNS = Nothing End Sub
优化版(仅处理选中的待发邮件,移动后自动打开编辑)
更符合实际使用需求,不会误操作其他待发邮件:
Sub CancelSelectedDeferredMail() Dim SelectedItem As Object Dim DraftsFolder As Outlook.Folder Dim oNS As Outlook.NameSpace Dim MovedMail As Outlook.MailItem Set oNS = Application.GetNamespace("MAPI") Set DraftsFolder = oNS.GetDefaultFolder(olFolderDrafts) ' 校验是否选中了邮件 If Application.ActiveExplorer.Selection.Count <> 1 Then MsgBox "请先选中发件箱中需要中止发送的单封邮件", vbExclamation Exit Sub End If Set SelectedItem = Application.ActiveExplorer.Selection.Item(1) If Not TypeOf SelectedItem Is Outlook.MailItem Then MsgBox "请选中有效的邮件项", vbExclamation Exit Sub End If ' 清除延迟投递规则,移动到草稿箱 SelectedItem.DeferredDeliveryTime = #1/1/4501# Set MovedMail = SelectedItem.Move(DraftsFolder) ' 自动打开邮件供编辑 MovedMail.Display ' 释放对象 Set MovedMail = Nothing Set SelectedItem = Nothing Set DraftsFolder = Nothing Set oNS = Nothing End Sub
功能区按钮添加方法
- 右键点击Outlook顶部功能区空白处,选择「自定义功能区」
- 在左侧「从下列位置选择命令」下拉框中选择「宏」,即可看到你编写的上述宏函数
- 右侧选择你想要放置按钮的选项卡/组,点击「添加」即可将宏按钮放到功能区,也可自定义按钮名称和图标。
内容的提问来源于stack exchange,提问作者Matthew Barraud
相关产品推荐
相关产品推荐

