2016-02-05 34 views
6

名前を取得し、Outlookで解決して、選択した名前のエイリアスを返す関数があります。これは、アドレス帳に選択した名前のエントリが複数存在する場合に失敗します。例えば"Smith、Bob" & "Smith、Bob X"。私が解決しようとする名前が "Smith、Bob X"の場合、コードは正常に動作しますが、プレーンな "Smith、Bob"は失敗します。Outlook受信者を解決するときに複数のエントリの最初のエントリを選択する

複数のエントリが見つかった場合、Outlookは名前の確認ダイアログを開きます(これは名前を手動で解決すると発生します)。

私のコードで複数のエントリが見つかった場合は、どのように最初のエントリを選択しますか?あなたが(例えばGALのような)特定の検索コンテナのコンテンツテーブルにPR_ANR制限を作成することができ、拡張MAPIレベル(C++または唯一のDelphi)で

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 

答えて

1

。これは、[編集]ボックスに入力した名前が解決されたときにOutlookが実行する処理で、検索パス内のすべてのコンテナを通過してPR_ANR制限が適用されます。一致するものが複数見つかった場合は、リストが表示されたダイアログボックスが表示されます。 1つの一致がある場合はそれが戻され、検索が停止されます。一致しない場合は、検索パスの次のコンテナに進みます。

Outlookオブジェクトモデルただし、この機能を公開しません。 Redemption(任意の言語)をオプションとして使用すると、RDOAddressBook .ResolveNameExとRDOAddressList .ResolveNameExが公開され、一致するリストが返されます。

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

私は仕事用コンピュータを使用していますので、何かをダウンロードすることはオプションではありません。私は恐れています。だから私はこれがVBAだけで達成できるものではないと思いますか? – StevenWalker

+0

それは正しいです。 –