如何在传入消息上设置旋转类别颜色?

时间:2010-12-09 22:09:35

标签: vba outlook categories

我们的客户支持团队会在群组收件箱中收到电子邮件。他们希望为每封收到的电子邮件分配一个类别/颜色,以便他们更好地分配客户请求。

由于团队中有三个人,我创建了三个具有唯一关联颜色的类别。他们希望颜色在循环中顺序旋转(即Person1获取mailItem1类别为红色,Person2获取mailItem2类别橙色,Person3获取mailItem3类别黄色,Person1获取mailItem4类别为红色,等等。)

我设置了一条规则来运行收到的邮件,并拼凑了我在网上找到的关于Outlook mailItem属性的脚本,但它没有为收件箱项目分配单一颜色。

Sub AssignUserColor(myMail As MailItem)
    Dim strID As String
    Dim objMail As Outlook.MailItem

    strID = myMail.EntryID
    Set objMail = Application.Session.GetItemFromID(strID)
    'myMail.Category.Color = olCategoryColorBlue
    myMail.Categories = olCategoryColorBlue
    objMail.Save

    Set objMail = Nothing
End Sub

2 个答案:

答案 0 :(得分:0)

你已经有了一个MailItem(myMail) - 如果直接使用它而不是尝试获取一个新的,会发生什么? OOM是一个变幻无常的野兽 - 不要试图绕过它的缓存模型。您可能还想查看是否无法设置其他内容(例如主题),以查看代码是否运行到预期的部分并可以执行更新。

此外,Categories的类型是一个字符串,但olCategoryColorBlue(来自OlCategoryColor枚举)是一个数字。嗯。不知道这是如何工作的。我相信你必须将枚举值转换为“名称”。请参阅Categories Interface上的链接,这些链接可以通过索引(OlCategoryColor?)或线性搜索进行索引。

此外,我相信您只需使用规则向导(无VBA)即可完成此操作。

希望你找到你的问题。快乐的编码。

答案 1 :(得分:0)

我在工具栏中添加了一个按钮,用于启动一个用户表单,用于收集哪些员工可以接收电子邮件的名称。这些名称 - 我的类别名称相同 - 以及员工总数在范围内是公开的。从填充用户表单的相同主过程调用这两个过程。

Public sumOfAvailableEmps As Integer
Dim empArray(4) As String

Private Sub CheckAvailableUsers()

Dim x As Integer
Dim emp1 As Boolean, emp2 As Boolean, _
        emp3 As Boolean, emp4 As Boolean      'has emp already been
                                                    'added to array of available
                                                    'users?
'initialize whether emp has been counted yet
emp1 = False
emp2 = False
emp3 = False
emp4 = False

    For x = 0 To 3
        If UserForm1.emp1 = True And ajCount = False Then
            empArray(x) = "Emp1 Items"
            ajCount = True
        ElseIf UserForm1.emp2 = True And bsCount = False Then
            empArray(x) = "Emp2 Items"
            bsCount = True
        ElseIf UserForm1.emp3 = True And kwCount = False Then
            empArray(x) = "Emp3 Items"
            kwCount = True
        ElseIf UserForm1.emp4 = True And paCount = False Then
            empArray(x) = "Emp4 Items"
            paCount = True
        Else
            empArray(x) = ""
        End If
    Next x

End Sub

Private Sub AssignColorCategory()

Dim myOlNameSpace As NameSpace
Dim objFolder As Folder
Dim myItems As items
Dim itemCount As Long

Set myOlNameSpace = Outlook.Application.GetNamespace("MAPI")
Set objFolder = myOlNameSpace.GetDefaultFolder(6)
Set myItems = objFolder.items


itemCount = myItems.Count

    For Each item In myItems
        If TypeOf item Is Outlook.MailItem Then
             Select Case itemCount Mod sumOfAvailableEmps
                 Case 0
                     item.Categories = empArray(0)
                 Case 1
                     item.Categories = empArray(1)
                 Case 2
                     item.Categories = empArray(2)
                 Case 3
                     item.Categories = empArray(3)
                 Case Else
                     item.Categories = empArray(0)
             End Select
             'without save method, the color change won't display on-screen
             item.Save
         End If
    Next


'release memory
Set myItems = Nothing
Set objFolder = Nothing
Set myOlNameSpace = Nothing