2010-12-09 1 views
0

Notre équipe de support client reçoit des e-mails dans une boîte de réception de groupe. Ils aimeraient attribuer une catégorie/couleur à chaque courriel entrant afin de mieux répartir les demandes des clients.Comment définir une couleur de catégorie rotative sur les messages entrants?

Comme il y a trois personnes dans l'équipe, j'ai créé trois catégories avec une couleur associée unique. Ils veulent que la couleur tourne séquentiellement dans une boucle (ie Person1 obtient la catégorie mailItem1 rouge, Person2 obtient la catégorie mailItem2 orange, Person3 obtient la catégorie mailItem3 jaune, Person1 obtient la catégorie mailItem4 rouge, etc.)

Je règle une règle à exécuter sur les messages entrants et bricolés ensemble un script de ce que j'ai pu trouver en ligne concernant les propriétés Outlook mailItem, mais il n'attribue pas une seule couleur aux éléments de la boîte de réception.

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 

Répondre

0

Vous avez déjà un MailItem (myMail) - que se passe-t-il si vous l'utilisez directement au lieu d'essayer d'en extraire un nouveau? Le MOO est une bête inconstante - n'essayez pas de contourner son modèle de mise en cache. Vous pouvez également voir si vous ne pouvez pas définir autre chose, tel qu'un sujet, pour voir si le code s'exécute sur les parties attendues et peut effectuer une mise à jour.

De plus, le type Categories est une chaîne mais olCategoryColorBlue (de l'énumération OlCategoryColor) est un nombre. Hmm. Je ne suis pas sûr de comment cela fonctionne. Je crois que vous devez convertir la valeur d'énumération au "nom". Voir les liens sur Categories Interface, qui peut être indexé via un index (OlCategoryColor?) Ou linéaire recherché.

Cependant, je crois que vous pouvez le faire avec seulement l'assistant de gestion des règles (pas de VBA).

Espérons que vous trouverez votre problème. Codage heureux.

+0

Je pensais que je posterais une solution pour tous ceux qui sont intéressés. J'ai continué à expérimenter et finalement je l'ai fait fonctionner. –

+0

Public Sub ReadAssignEmails (item as outlook.mailitem) –

0

J'ai ajouté un bouton à la barre d'outils qui lance un formulaire utilisateur qui recueille les noms des employés qui sont disponibles pour recevoir des courriels. Ces noms - mes catégories sont nommées de la même manière - et le nombre total d'employés sont publics. Ces deux procédures sont appelées à partir de la même procédure principale qui remplit le formulaire utilisateur.

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 
Questions connexes