Outlook VBA脚本标记带有类别的电子邮件正在创建重复的类别

问题描述:

我正在尝试编写一个规则,将类别应用于所有传入邮件。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++”,反之亦然。

搞清楚如何使用行调试的VBA线我终于发现了这个问题后...

事实证明,Item.Categories返回类别作为格式的字符串:

“组别,Category2,...“

每个类别之间用逗号分隔和空格

的解决方案是改变行:

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

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