Как переместить все сообщения в разговоре? - PullRequest
2 голосов
/ 02 июня 2011

Мне нужно знать, как переместить все сообщения в разговоре одновременно.

Мой макрос в настоящее время читает

Sub Archive()
    Set ArchiveFolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Parent.Folders("Archive")
    For Each Msg In ActiveExplorer.Selection
        Msg.UnRead = False
        Msg.Move ArchiveFolder
    Next Msg
End Sub

Но это перемещает только последнее сообщение ... и только когда разговор полностью свернут!Я не могу Архивировать, когда разговор расширен.

Ответы [ 3 ]

10 голосов
/ 03 июня 2011

Пол-Ян поставил меня на правильный путь, поэтому я дал ему ответ.Вот моя действительно плохая версия VBA (мне не хватает приведения типов, проверки).Но он работает на свернутых и расширенных разговорах почты.

Sub ArchiveConversation()
    Set ArchiveFolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Parent.Folders("Archive")
    Set Conversations = ActiveExplorer.Selection.GetSelection(Outlook.OlSelectionContents.olConversationHeaders)
    For Each Header In Conversations
        Set Items = Header.GetItems()
        For i = 1 To Items.Count
            Items(i).UnRead = False
            Items(i).Move ArchiveFolder
        Next i
    Next Header
End Sub
3 голосов
/ 11 апреля 2018

ответ Энтони почти работает для меня.Но это не работает как для сообщений, так и для разговоров.Вот моя модификация:

Sub Archive()
    Set ArchiveFolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Parent.Folders("Archive")

    Dim IsMessage As Integer
    IsMessage = 0

    For Each Msg In ActiveExplorer.Selection
        Msg.Move ArchiveFolder
        IsMessage = 1
    Next Msg

    If IsMessage = 0 Then
        Set Conversations = ActiveExplorer.Selection.GetSelection(Outlook.OlSelectionContents.olConversationHeaders)
        For Each Header In Conversations
            Set Items = Header.GetItems()
            For i = 1 To Items.Count
                Items(i).UnRead = False
                Items(i).Move ArchiveFolder
            Next i
        Next Header
    End If

End Sub
3 голосов
/ 03 июня 2011

Если вы хотите обрабатывать разговоры, вам придется делать это явно.Вы можете перейти от MailItem к его разговору, используя MailItem.GetConversation , но вам лучше работать с беседами напрямую.

Что вы делаете:

  1. Получить все заголовки разговоров из текущего выбора
  2. Для каждого разговора получить отдельные элементы
  3. Выполнить с ними свою архивацию.

Следующий код C # иллюстрируетэто и должно быть тривиально для портирования на VBA.

Outlook.Selection selection = Application.ActiveExplorer().Selection;
Outlook.Selection convHeaders = selection.GetSelection( Outlook.OlSelectionContents.olConversationHeaders) as Outlook.Selection;
foreach (Outlook.ConversationHeader convHeader in convHeaders)
{
  Outlook.SimpleItems items = convHeader.GetItems();
  for (int i = 1; i <= items.Count; i++)
  {
    if (items[i] is Outlook.MailItem)
    {
      Outlook.MailItem mail =  items[i] as Outlook.MailItem;
      mail.UnRead = false;
      mail.Move( archiveFolder );
    }
    // else... not sure how if you want to handle different types of items as well  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...