2017-10-09 1 views
1

J'essaie de puiser dans le carnet d'adresses global outlook d'entreprise à partir d'Excel en utilisant VBA. À l'heure actuelle, il est configuré pour regarder une sélection de cellules dans une feuille de calcul (en supposant que la sélection contient des ID utilisateur) et boucle sur chaque ID utilisateur (alias) et fournir un message simple indiquant s'il se trouve ou non dans le carnet d'adresses. Le problème que j'ai est que la société pour laquelle je travaille a des longueurs d'alias différentes selon la fonction de votre travail (par exemple, les associés de champ ont 14 caractères, les associés de QG sont 6 caractères). Dans certains cas, un alias provenant d'un associé HQ correspond aux 6 premiers caractères d'un champ associé (par exemple, pbogar & pbogart.s04598). Dans ces cas, l'alias (pbogar) ne peut pas être résolu. Est-il possible d'afficher la même boîte de dialogue "vérifier les utilisateurs" qu'Outlook afficherait s'il y a plusieurs utilisateurs partageant les mêmes caractères d'un alias? ou pour vous assurer que quand il se nourrit de ce code, il ne regarde que l'alias d'une certaine longueur de caractère du carnet d'adresses global?Excel VBA Outlook.Recipients.Add ("Alias") - traitant des éléments non résolus

code:

Sub UserID_From_Email_Selection() 
Dim OutApp As Object 
Dim OutMail As Object 
Dim Recip As Object 
Dim Cell As Range 

On Error GoTo err 

Set OutApp = CreateObject("Outlook.Application") 
Set OutMail = OutApp.CreateItem(0) 

On Error Resume Next 
For Each Cell In Selection 
    If Cell.Value <> "" Then 
     Set Recip = OutMail.Recipients.Add(Cell.Value) 

     Recip.Resolve 
     If Recip.resolved Then 
      MsgBox (Recip & ": Resolved") 
     Else 
      MsgBox (Recip & ": Unresolved") 
     End If 

     Recip.Delete 
     Set Recip = Nothing 

    End If 
Next Cell 

On Error GoTo err 

Set OutMail = Nothing 
Set OutApp = Nothing 

Exit Sub 

err: 
On Error Resume Next 
    Set Recip = Nothing 
    Set OutMail = Nothing 
    Set OutApp = Nothing 
End Sub 

Répondre

0

Pas grand-chose que vous pouvez faire en utilisant le modèle d'objet Outlook - il est soit MAPI étendu (C++ ou Delphi uniquement) ou Redemption (toutes les langues). Dans Redemption, vous pouvez utiliser RDOMail.Recipients.ResolveAll (true) pour afficher les invites du carnet d'adresses (y compris une invite de destinataire ambiguë) si nécessaire. Vous pouvez également utiliser RDOSession.Addressbook.ResolveName(name, **true**).

Pour éviter des problèmes de ce type, vous pouvez stocker les adresses SSMTP (qui sont toujours uniques) au lieu de l'alias de connexion.