2011-06-02 19 views
1

我知道如何激活Developer tabdisable macro security,並將button添加到我的工具欄中。我需要知道的是如何一次性將所有的消息移動到對話中。如何製作移動對話中所有消息的Outlook宏?

我目前宏觀讀取

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 

但只有移動的最新消息...只有當對話完全崩潰了!談話擴大時我無法存檔。

回答

2

如果你想處理對話,你必須明確地這樣做。您可以使用MailItem.GetConversation從MailItem轉到其對話,但您最好直接使用對話。

你要做的就是:

  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 } 
} 
8

Paul-Jan把我放在正確的道路上,所以我給了他答案。這是我非常糟糕的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 
+1

有沒有辦法在Outlook 2003上做到這一點? – 2012-03-07 14:33:41