Outlook VBA не может сохранить изменения в MailItem только на старых элементах - PullRequest
0 голосов
/ 03 октября 2019

У меня есть макрос в 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

Любые мысли или предложения будут с благодарностью !!

1 Ответ

0 голосов
/ 04 октября 2019

Если это почтовый ящик Exchange, возможно, что Exchange изменил элемент на стороне сервера, это изменение было загружено в файл OST, но, поскольку объектная модель Outlook не знает об этом изменении, при попытке сохранить(устаревший) элемент, вы получите ошибку конфликта.

...