К какому типу относятся эти заголовки разговоров? - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь подать электронную почту с помощью макроса, но у меня возникают проблемы, если пользователь выбирает заголовок беседы. Что такое typeOf этих заголовков?

Conversation Header

Я пытаюсь получить родительскую папку, когда выбрано электронное письмо, чтобы определить, должны ли электронные письма быть перемещены (или уже были). Для .MailItem я могу получить его, используя следующий код:

Set selection = ActiveExplorer.selection
Set CurrentFolder = selection(1).Parent

Но если выбран только заголовок диалога, возвращается ошибка «Ошибка времени выполнения« 440 »: индекс массива выходит за границы».

При попытке использовать оператор if следующим образом:

If TypeOf selection Is Outlook.MailItem Then
    Set CurrentFolder = selection(1).Parent
ElseIf TypeOf selection Is Outlook.ConversationHeader Then
    'Set CurrentFolder
Else
    'Return error
End If

.ConversationHeader не работает, так как в операторе ElseIf возвращается False.

Что typeof я должен использовать? и какой код я должен затем использовать, чтобы найти родительскую папку?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

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.

0 голосов
/ 11 января 2019

Возвращение свойства выделения Выбор объект, а не один элемент. Вам нужно будет перебрать элементы выбора (используйте цикл «for each» или «for» от 1 до Selection.Count, используя Selection.Item(index)), чтобы добраться до выбранных элементов.

Вы можете видеть живые объекты Outlook с их свойствами, методами и событиями, используя OutlookSpy .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...