Я несколько дней борюсь со следующей задачей:
Предполагается, что вы сгруппировали свои сообщения Outlook по беседам - Как запретить помечать сообщениями из любой беседы read при двойном щелчке по главному заголовку разговора?
Код, который я до сих пор придумал:
- Я использую
Application_ItemLoad
, чтобы получить объект любой выбранной почты - Затем
myItem_Read
для сохранения свойства UnRead
выбранной почты, поскольку оно еще не доступно во время ItemLoad
- Наконец, я слушаю событие
PropertyChange
, чтобы изменить любоечитать почту непрочитано . Однако в ветви else ниже выражения mySelection.Item(1).GetConversation.MarkAsUnread
происходит сбой неожиданно. Насколько я понимаю, mySelection.Item(1)
выбирает объект заголовка беседы. Затем я пытаюсь получить объект беседы, используя GetConversation
, и вызываю метод MarkAsUnread
, который теоретически должен пометить все сообщения беседы как непрочитанные снова. Просто теория ... И я не знаю почему. Ваша помощь высоко ценится.
1.
Public WithEvents myItem As Outlook.mailItem
Private Sub Application_ItemLoad(ByVal Item As Object)
If EventsDisable = True Then Exit Sub
If Item.Class = olMail Then
Set myItem = Item
End If
End Sub
2.
Private Sub myItem_Read()
If EventsDisable = True Then Exit Sub
unReadWhenSelected = myItem.UnRead
End Sub
3.
Private Sub myItem_PropertyChange(ByVal Name As String)
Dim mySelection As Selection
Dim oConvHeader As Outlook.ConversationHeader
Dim oConv As Outlook.Conversation
If EventsDisable = True Then Exit Sub
If Name = "UnRead" Then
If unReadWhenSelected = True And myItem.UnRead = False Then
Set mySelection = Outlook.ActiveExplorer.Selection.GetSelection(Outlook.OlSelectionContents.olConversationHeaders)
If mySelection.Count = 0 Then
myItem.UnRead = True
myItem.Save
Else
mySelection.Item(1).GetConversation.MarkAsUnread
End If
End If
End If
End Sub
Целая история для заинтересованных читателей:
Допустим, вы хотели открыть беседу, дважды щелкнув ее заголовок, при этом элементы беседы не были отмечены как read . Как сделать это самым элегантным способом? Я хочу использовать Outlook E-Mail в качестве задач и изменить смысл чтения почты, чтобы завершить задачу. Таким образом, я использую поисковые папки с опцией «показывать только непрочитанные сообщения». Как только я заканчиваю задание, я просто помечаю его как прочитанное макросом. Но для всех остальных случаев, когда я просто хочу читать почту и т. Д., Они должны оставаться непрочитанными.
До сих пор мне удалось написать макрос, чтобы выполнить это для отдельных сообщений электронной почты, которые не являются частьюразговоров. И когда дело доходит до разговоров, этот макрос работает для всех его элементов - но не для первого, также известного как запись заголовка основного разговора.
Редактировать:
Добавлено подтверждение концепциикод для фактической маркировки всех писем в разговоре как read . Не работает в моем сценарии, хотя. Итак, почему это не работает в моем примере кода выше?
Sub Testorino()
Dim mySelection As Selection
Set mySelection = Outlook.ActiveExplorer.Selection.GetSelection(Outlook.OlSelectionContents.olConversationHeaders)
mySelection.Item(1).GetConversation.MarkAsUnread
End Sub