我们的客户支持团队会在群组收件箱中收到电子邮件。他们希望为每封收到的电子邮件分配一个类别/颜色,以便他们更好地分配客户请求。
由于团队中有三个人,我创建了三个具有唯一关联颜色的类别。他们希望颜色在循环中顺序旋转(即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
答案 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