2016-02-05 20 views
6

Ho una funzione che prende un nome e lo risolve in Outlook per restituire l'alias per il nome selezionato. Ciò non riesce quando nella rubrica è presente più di una voce per il nome selezionato. per esempio. "Smith, Bob" & "Smith, Bob X". Se il nome che cerco di risolvere è "Smith, Bob X", il codice funziona correttamente, ma il semplice "Smith, Bob" fallisce.Selezione della prima voce di più voci quando si risolve un destinatario di Outlook

Suppongo che quando vengono trovate più voci, Outlook apre la finestra di dialogo Controlla nomi (ciò si verifica quando risolvo i nomi manualmente).

Quando il mio codice trova più voci, come seleziono il primo?

Function GETTPX(ByVal UserName As String) As String 
Dim objOL As Object 
Dim oRecip As Outlook.Recipient 
Dim oEU As Outlook.ExchangeUser 
Dim oEDL As Outlook.ExchangeDistributionList 

Set objOL = CreateObject("Outlook.Application") 

Set oRecip = objOL.Session.CreateRecipient(UserName) 
oRecip.Resolve 
If oRecip.Resolved Then 
    Set oEU = oRecip.AddressEntry.GetExchangeUser 
End If 
GETTPX = oEU.Alias 

Set oRecip = Nothing 
Set objOL = Nothing 

End Function 

risposta

1

A livello MAPI estesa (C++ o Delphi solo) è possibile creare una restrizione PR_ANR sul tavolo il contenuto di un contenitore particolare di ricerca (come ad esempio GAL). Questo è ciò che Outlook fa quando risolve un nome che hai digitato nella casella di modifica: passa attraverso tutti i contenitori nel percorso di ricerca e applica la restrizione PR_ANR. Se sono state trovate più corrispondenze, visualizza una finestra di dialogo con l'elenco. Se esiste una singola corrispondenza, viene restituita e la ricerca viene interrotta, altrimenti continua al successivo contenitore nel percorso di ricerca.

Outlook Object Model tuttavia non espone questa funzionalità. Se si utilizza Redemption (qualsiasi lingua) è un'opzione, espone RDOAddressBook .ResolveNameEx e RDOAddressList .ResolveNameEx, che restituisce un elenco di corrispondenze.

set Session = CreateObject("Redemption.RDOSession") 
    Session.MAPIOBJECT = Application.Session.MAPIOBJECT 
    set AdrrEntries = Session.AddressBook.ResolveNameEx("john") 
    Debug.Print AdrrEntries.Count & " names were retruned by ResolveNameEx:" 
    Debug.Print "------------" 
    for each AE in AdrrEntries 
    Debug.Print AE.Name 
    next 
    Debug.Print "------------" 
+0

Sto utilizzando un computer di lavoro, quindi il download di qualcosa non sarebbe un'opzione che temo. Quindi immagino che questo non sia qualcosa che posso ottenere solo con VBA? – StevenWalker

+0

Questo è corretto. –