2016-05-06 14 views
0

我正在嘗試編寫一個規則,將類別應用於所有傳入郵件。Outlook VBA腳本標記帶有類別的電子郵件正在創建重複的類別

最終我想用「Programming-C」和「Programming-C++」標籤來標記C和C++相關的電子郵件,但我簡化了SO的例子。

我也希望能夠對已具有指定類別的郵件運行此規則,但我不希望它對已標記的電子郵件加標籤。

這裏是添加類別,而無需創建一個重複的子程序:

' Add a category but don't create duplicates 
Sub AddCategory(ByRef Item As MailItem, strCategory As String) 
    Dim exists As Boolean 
    Dim arrCategories As Variant 

    ' Initialize variables 
    exists = False 
    arrCategories = Split(Item.categories, ",") 

    ' Loop through all categories 
    For i = LBound(arrCategories) To UBound(arrCategories) 

     ' Check if the specified category already exists 
     If StrComp(strCategory, arrCategories(i)) = 0 Then 
      exists = True 
      Exit For 
     End If 
    Next i 

    ' If the category does not exist, add it 
    If Not exists Then 
     Item.categories = Item.categories & "," & strCategory 
    End If 
End Sub 

,這裏是調用它的子程序:

Sub filter(Item As MailItem) 
    Call AddCategory(Item, "Programming - C") 
    Call AddCategory(Item, "Programming - C++") 
    Item.Save 
End Sub 

filter子程序從規則調用,並適用到所有收到的郵件。 問題是,如果我在「收件箱中的所有項目」上運行此規則,並且電子郵件已被標記爲「編程-C」和「編程 - C++」,它會添加重複標記,即使我正在檢查重複項!

(它會重複無論是「編程 - C」或「編程 - C++」的標籤,而不是兩者哪一個複製似乎是隨機的,並且是完全不符......)

我一直在撓撓我的頭腦,試圖找出這一天。

如何正確檢查現有標籤以避免重複?


編輯

我注意到,當電子郵件已經被標記有兩個「編程 - C」和「編程 - C++」這兩個標籤的順序似乎有一個影響。當我運行腳本時,它總是會複製第二個標記,而不是第一個標記。所以如果「Programming-C」是第一個標籤,它將複製「Programming-C++」,反之亦然。

回答

0

搞清楚如何使用行調試的VBA線我終於發現了這個問題後...

事實證明,Item.Categories返回類別作爲格式的字符串:

「組別,Category2,...「

每個類別之間用逗號分隔和空格

的解決方案是改變行:

arrCategories = Split(Item.categories, ",")

arrCategories = Split(Item.categories, ", ")

相關問題