【问题标题】:Can't delete the last email无法删除最后一封电子邮件
【发布时间】:2020-06-29 14:57:38
【问题描述】:

如果我选择了多封电子邮件,sub 会删除除最后一封之外的所有电子邮件,然后给出错误。

如果我选择一项,它会直接出现错误。

Private Sub CommandButton8_Click()
For i = Application.ActiveExplorer.Selection.Count To 1 Step -1
' https://msdn.microsoft.com/en-us/library/office/ff863343.aspx
    Dim email As Outlook.MailItem
    Set email = Application.ActiveExplorer.Selection.Item(i)
    email.Delete
Next
End Sub

Error -2147352567 (80020009) Outlook 项目无法删除(翻译自荷兰语)

【问题讨论】:

  • 你想让我们查一下那个错误号吗?随之而来的信息是什么?
  • 错误提示:outlook 项目无法删除(翻译自荷兰语)
  • 这个错误没有别的了?没有解释为什么不能删除?
  • 不,错误中没有其他内容

标签: vba outlook


【解决方案1】:

Aldo 有一个有效点

打开预览窗格使其工作

    Private Sub CommandButton8_Click()
On Error Resume Next

' turn off preview plane to prevent error
Application.ActiveExplorer.ShowPane olPreview, False

For i = Application.ActiveExplorer.Selection.Count To 1 Step -1

    If i = 1 Then

    End If

   Application.ActiveExplorer.Selection.Item(i).Delete

Next

Application.ActiveExplorer.ShowPane olPreview, True

End Sub

【讨论】:

    【解决方案2】:

    在没有测试任何东西的情况下(你没有告诉我们你使用的是哪个 Outlook 版本),我猜你可以尝试删除邮件项目而无需明确地逐一分配它们:

    For i = Application.ActiveExplorer.Selection.Count To 1 Step -1
        Application.ActiveExplorer.Selection.Item(i).Delete
    Next
    

    这具有更快执行的额外好处。在您的代码中,尝试从选择中删除最后一个剩余项目会引用变量 email void,这可能是 VBA 不喜欢的。

    【讨论】:

    • 我确实对其进行了测试,但它只是给出了一个不同的错误:Extrection Outlook 期间的错误 440 无法删除该项目(翻译自荷兰语)
    • 你在编造东西。您能否提供一些参考资料来证实您的主张? “这可能是 VBA 不喜欢的东西”并没有给出合理的答案。事实上,你的代码和 OP 的代码在功能上是等价的。
    • 点了。除了上面发布的代码之外,是否有可能在某处打开邮件项目,例如在单独的窗口中显示?这或许可以解释这个问题。我的建议确实没有。
    • 我说得有道理,我在不同的查看模式下尝试了脚本并关闭了“阅读”选项,这样就可以了。重点是为什么我在“阅读”邮件时可以移动邮件(到不同的文件夹)但不能删除它?
    • 当您显示一个项目时,应用程序会在其上维护一个句柄(对对象的引用),以防止它被删除。将邮件项放入另一个文件夹并不是物理移动它(这不像在 Windows 中移动文件);它只是改变了项目本身的一些设置(即邮件文件夹)。邮件项目在此操作期间保持相同的引用,因此是允许的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    相关资源
    最近更新 更多