Я просто обновился с Outlook 2010 до 2013 года, и у меня возникла проблема. У меня был, используя приведенный ниже код, настроить его так, чтобы все, что я удаляю или перемещаю в папку мусора, автоматически помечено как прочитанное.Перспектива 2013: Отметить элементы как прочитанные при удалении/перемещении в корзину
Option Explicit
Dim WithEvents DeletedItems As Outlook.Items
Private Sub Application_Startup()
Set DeletedItems = Session.GetDefaultFolder(olFolderDeletedItems).Items
End Sub
Private Sub DeletedItems_ItemAdd(ByVal Item As Object)
If Item.UnRead = True Then
Item.UnRead = False
Item.Save
End If
End Sub
Он работал как шарм в 2010 году в течение многих лет, но не работает на всех в 2013 году я не много удачи найти непосредственно применимый ответ, и я тоже новичок в VBA, чтобы иметь хорошая картина о том, как применить некоторые ответы, которые я встретил, поэтому любая помощь будет оценена по достоинству.
Cheers.
Редактировать: Вот код, который я использую, чтобы проверить, как Outlook видит прочитанный/непрочитанный статус удаленных писем. Я снял функцию Pause
с here.
Private Sub DeletedItems_ItemAdd(ByVal Item As Object)
RememberItem Item 'Remember which email this is
Debug.Print "At start: " & Item.UnRead 'Should be True
If Item.UnRead = True Then
Item.UnRead = False
Item.Save
End If
Debug.Print "After mark read: " & Item.UnRead 'Should be False
Pause 10 'In separate module. Code from https://stackoverflow.com/a/30196332/2623367
Debug.Print "After pause: " & Item.UnRead 'Should be False unless item has become Unread
End Sub
Private Function RememberItem(Optional ByVal Item As Object) As Object
'Allows check-up on the deleted item after event-handler is done with it.
Static oDeleted As Object
If Not Item Is Nothing Then Set oDeleted = Item
Set RememberItem = oDeleted
End Function
Private Sub CheckStatus()
Dim CheckItem As Object
Set CheckItem = RememberItem
Debug.Print "Follow-up check: " & CheckItem.UnRead 'Should be False
End Sub
Выход я получаю от этого:
- При запуске: True (пункт непрочитанные - это правильно)
- После того, как метка чтения: Ложные (пункт читается - это может быть или не быть правильно)
- После паузы: Ложные (пункт читается - это неправильно)
- Последующий контроль: Ложные (пункт читается - это неверно)
UPDATE:
Следуя за этим на случай, если кто-нибудь встретит его позже. Ответ, отмеченный как работа, разрешил мою проблему, хотя я иногда все еще видел какое-то странное поведение. Немного больше копаний показал, что основной причиной моей проблемы была проблема синхронизации между Outlook и сервером электронной почты. Outlook удалит что-то, но синхронизация будет ужасной, и похоже, что Outlook вытаскивал обновления с сервера, прежде чем отправлять свои собственные обновления. Похоже, что эти расхождения заставили Outlook потерять информацию о том, какие данные должны быть удалены.
Мое рабочее место использует Google Apps в качестве своего поставщика электронной почты, и я настроил все в Outlook с правильными настройками IMAP, но Google и Outlook не играет хорошо. Удалось устранить все непредсказуемое поведение, используя выбранный ответ и Outlook syncing tool for Google Apps. Также подтвердил, что мой исходный код ведет себя так же, как и при использовании в сочетании с инструментом синхронизации Google Apps.
Я должен был осознать намного раньше, что проблема может заключаться в том, что проблема с Google и Outlook в основном связана с ошибкой, но мне это даже не приходило в голову, поэтому я ранее не упомянул компонент Google этого уравнения. Надеемся, это обновление спасет кого-то еще, что проблема!
Есть ли какие-либо сообщения об ошибках? Что происходит, когда элемент помещается в папку удаленных элементов? Выполняется ли код? – OpiesDad
Я тестировал этот код в Outlook 2013, и он работал на меня. – OpiesDad
Не забыли ли вы включить макросы при открытии Outlook? – OpiesDad