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

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

功能区按钮添加方法

  1. 右键点击Outlook顶部功能区空白处,选择「自定义功能区」
  2. 在左侧「从下列位置选择命令」下拉框中选择「宏」,即可看到你编写的上述宏函数
  3. 右侧选择你想要放置按钮的选项卡/组,点击「添加」即可将宏按钮放到功能区,也可自定义按钮名称和图标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:45:06