Selection.Item (index) выдает исключение, если ваш выбор - ConversationHeader, указанный на прилагаемом изображении.
Мне не удалось найти фактический тип объекта для этого заголовка, но есть несколько способов обойти это. Определив, что это не MailItem, вы можете проверить ActiveExplorer.Selection.GetSelection(Outlook.OlSelectionContents.olConversationHeaders)
https://docs.microsoft.com/en-us/office/vba/api/outlook.selection.getselection
В частности, они указывают
Вызов GetSelection с olConversationHeaders в качестве
Аргумент возвращает объект Selection, имеющий свойство Location
равно OlSelectionLocation.olViewList.
Если текущее представление не является представлением беседы или, если
Selection.Location не равно OlSelectionLocation.olViewList,
Вызов GetSelection с olConversationHeaders в качестве аргумента
возвращает объект Selection с Selection.Count, равным 0.
Выполнение быстрого теста этого
Dim oSelection = Selection
Set oSelection = ActiveExplorer.Selection.GetSelection(olConversationHeaders)
Print oSelect.Count
--returns 1 when i have that odd header selected.
--returns 0 when you have a mailItem within the header selected
Кроме того, посмотрите на Как переместить все сообщения в разговоре?
Мы можем легко скорректировать ответы на что-то вроде:
Set conversations = ActiveExplorer.Selection.GetSelection(Outlook.OlSelectionContents.olConversationHeaders)
Dim sItems As SimpleItems
For Each Header In conversations
Set Items = Header.GetItems()
For i = 1 To Items.Count
If TypeOf Items(i) Is Outlook.MailItem Then
Debug.Print (Items(i).Parent)
End If
Next i
Next Header
End Sub
Примечательно, что возвращались только заголовки для электронных писем в выбранной группе, которые были В папке, в которой был сделан выбор. Я полагаю, что для продвижения вниз / вверх по течению вам нужно будет углубить анте, перейдя в объекты getConversations и Conversations.