【问题标题】:Outlook VBA fails to save changes to MailItem on older items onlyOutlook VBA 无法仅在旧项目上保存对 MailItem 的更改
【发布时间】:2020-02-01 05:22:06
【问题描述】:

我在 Outlook VBA 中有一个宏,旨在设置所选电子邮件的类别,并在用户单击“功能区”上的按钮时向发件人发送回复电子邮件。

以下代码将正确设置任何较新电子邮件的类别,但会抛出“运行时错误'440':无法保存此项目。”当在已经存在一段时间的电子邮件上运行时。我不知道是什么原因造成的,因为它运行了一段时间然后就不再工作了。

我尝试重新启动 Outlook、登录和注销以及重新启动计算机,但这些似乎都没有触发行为变化,所以我认为这与电子邮件的放置时间有关。这相当令人困惑,因为我不明白为什么在文件夹中停留的时间会影响保存能力,但不会影响访问 MailItem 属性的能力。

代码的简化版本(没有电子邮件发送部分,可以正常工作)如下:

Public Sub UpdateCategory
    Dim objItem as Object

    Set objItem = GetCurrentItem()

    'Verify that selected item is an email and an engineering request
    If TypeName(objItem) = "MailItem" And InStr(LCase(objItem.Subject), "engineering request") > 0 Then
        objItem.Categories = "Test"
        objItem.Save
    End If

    Set objItem = Nothing
End Sub

Function GetCurrentItem() As Object
    Dim objApp As Outlook.Application

    Set objApp = Application
    On Error Resume Next
    Select Case TypeName(objApp.ActiveWindow)
        Case "Explorer"
            Set GetCurrentItem = objApp.ActiveExplorer.Selection.Item(1)
        Case "Inspector"
            Set GetCurrentItem = objApp.ActiveInspector.CurrentItem
    End Select

    Set objApp = Nothing
End Function

任何想法或建议将不胜感激!

【问题讨论】:

    标签: vba outlook mailitem


    【解决方案1】:

    这是一个 Exchange 邮箱吗,可能是 Exchange 修改了服务器端的项目,该更改已下载到 OST 文件,但由于 Outlook 对象模型不知道更改,当您尝试保存时(陈旧)项目,您会收到冲突错误。

    【讨论】:

    • 这是一个 Exchange 邮箱。这似乎是合理的,有没有办法解决它?我如何确保宏引用的是项目的最新版本?
    • 您无能为力 - 您可以在完成后立即发布该项目。如果您将来需要打开它,请使用 Namespace.GetItemFromID 通过(以前保存的)条目 id 重新打开它。根据经验,不要长时间引用 Outlook 项目(打开、修改保存、发布),并避免多次保存项目 - 一次完成所有更改。
    猜你喜欢
    • 2013-12-23
    • 2014-07-23
    • 1970-01-01
    • 2010-12-24
    • 2017-08-16
    • 2018-01-01
    • 2015-04-29
    • 1970-01-01
    • 2015-12-06
    相关资源
    最近更新 更多