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, ", ")