Последний элемент разговора по электронной почте Outlook не вызывает событие Application_ItemLoad в VBA - PullRequest
1 голос
/ 17 октября 2019

Я написал макрос Visual Basic, чтобы снова пометить открытое письмо как «непрочитанное». Для этого я использовал событие Application_ItemLoad, как вы видите ниже. Тем не менее, при проверке этого для почтовых разговоров в группе Outlook по функции разговора я заметил кое-что странное:

Событие вообще не сработает при открытии последнего элемента такой группы разговоров с помощьюдважды щелкнув по нему.

Пожалуйста, объясните мне, почему для каждого другого электронного письма это событие срабатывает без каких-либо проблем, но только для последнего элемента группы разговоров, которое не происходит.

1 Ответ

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

Я мог бы найти это. В моем вспомогательном модуле у меня было это:
Public EventsDisable, unReadWhenSelected As Boolean.

Из большого сообщения о переполнении стека и вклада Рика Ротштейна в DailyDoseOfExcel.com Я узнал, что объявление переменных с разделением запятыми приводит к тому, что первая переменная объявляется как Вариант вместо предполагаемого Boolean .

Я только что перешел на следующее и ошибка исчезла .

Public EventsDisable As Boolean
Public unReadWhenSelected As Boolean

Я до сих пор не могу объяснить, почему происходит эта странная ошибка, когда EventsDisable объявлен как Вариант . Так что, если кто-нибудь знает, не стесняйтесь.

Option Explicit

' When doubleclick opening unread mails, they are automatically marked 'read'. This code will mark them 'unread'.
' Despite that, emails that have been read already and then doubleclick opened will stay 'read'.
' In other words: Doubleclicking a mail won't change its unread property
Public WithEvents myItem As Outlook.mailItem

Private Sub Application_ItemLoad(ByVal Item As Object)
    MsgBox "Item loaded"
    'If EventsDisable = True Then Exit Sub
    If Item.Class = olMail Then
            Set myItem = Item
     End If
End Sub

Private Sub myItem_Read()
    unReadWhenSelected = myItem.UnRead
End Sub


Private Sub myItem_PropertyChange(ByVal Name As String)
    If EventsDisable = True Then Exit Sub
    If Name = "UnRead" Then
        If unReadWhenSelected = True And myItem.UnRead = False Then
            myItem.UnRead = True
            myItem.Save
        End If
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...