2016-02-05 4 views
6

Ich habe eine Funktion, die einen Namen annimmt und in Outlook auflöst, um den Alias ​​für den ausgewählten Namen zurückzugeben. Dies schlägt fehl, wenn mehr als ein Eintrag für den ausgewählten Namen im Adressbuch vorhanden ist. z.B. "Smith, Bob" & "Smith, Bob X". Wenn der Name, den ich versuche zu lösen, "Smith, Bob X" ist, funktioniert der Code gut, aber "Smith, Bob" fällt aus.Auswählen des ersten Eintrags von mehreren Einträgen beim Auflösen eines Outlook-Empfängers

Ich vermute, wenn mehrere Einträge gefunden werden, öffnet Outlook das Dialogfeld Namen überprüfen (dies geschieht, wenn ich Namen manuell auflösen).

Wenn mein Code mehrere Einträge findet, wie wähle ich den ersten aus?

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 

Antwort

1

Auf der Extended MAPI-Ebene (C++ oder Delphi) Sie können eine PR_ANR Beschränkung der Inhaltstabelle eines bestimmten Suchcontainer (wie GAL) erstellen. Das ist, was Outlook tut, wenn es einen Namen auflöst, den Sie in das Feld Bearbeiten eingegeben haben - es durchläuft alle Container im Suchpfad und wendet die Einschränkung PR_ANR an. Wenn mehrere Übereinstimmungen gefunden wurden, wird ein Dialogfeld mit der Liste angezeigt. Wenn es eine einzige Übereinstimmung gibt, wird sie zurückgegeben, und die Suche wird gestoppt, andernfalls wird sie zum nächsten Container im Suchpfad fortgesetzt.

Outlook Object Model stellt diese Funktionalität jedoch nicht zur Verfügung. Wenn Redemption (beliebige Sprache) eine Option ist, werden RDOAddressBook .ResolveNameEx und RDOAddressList .ResolveNameEx, die eine Liste der Übereinstimmungen zurückgeben, verfügbar gemacht.

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

Ich benutze einen Arbeitscomputer, so dass nichts herunterladen würde ich keine Angst haben. Ich denke, das kann ich mit VBA nicht erreichen. – StevenWalker

+0

Das ist richtig. –

Verwandte Themen