-1

私は非常にシンプルな小さなアプリを念頭に置いています。これは、Excel から Outlook への Alt タブ移動の時間を節約するのに役立ちます。Exchange ユーザー エイリアス用のテキスト ボックスを持ち、Exchange ユーザーのフル ネームを返す小さなユーザー フォームを作成したいと考えています。ここで私が抱えている問題は、msdn のガイドがユーザーフォームに対して少しあいまいであることです: https://msdn.microsoft.com/en-us/library/office/ff869721.aspxといくつかのエラー メッセージが表示されます。いくつかの参照をアクティブにすることで修正されたものもあります。コードは非常に複雑です。

だから基本的に私は2つのテキストボックスとボタンを持っています。textbox1 はエイリアスを受け入れ、textbox2 はボタンをクリックした後にユーザー名を返します。

いくつかの例がありますが、それらのほとんどは、必要のない Excel ファイルに GAL をダンプすることになります。

ありがとう

4

1 に答える 1

0

これにより、必要なものが得られます。

Private Function GetFullName(inAlias As String) As String
    Dim olApp As Outlook.Application
    Dim olNS As Outlook.Namespace
    Dim olAdd As Outlook.AddressEntries
    Dim olMem As Outlook.AddressEntry
    Dim olLst As Outlook.AddressList
    Dim olAlias As String

    On Error Resume Next
    Set olApp = New Outlook.Application
    On Error GoTo 0

    If olApp Is Nothing Then
        GetFullName = "Source not available"
        Exit Function
    End If

    Set olNS = olApp.GetNamespace("MAPI")
    Set olLst = olNS.GetGlobalAddressList
    Set olAdd = olLst.AddressEntries

    For Each olMem In olAdd
        On Error Resume Next
        olAlias = olMem.GetExchangeUser.Alias
        On Error GoTo 0
        If olAlias = inAlias Then
            GetFullName = olMem.GetExchangeUser.Name
            Exit For
        Else
            GetFullName = "Invalid Alias"
        End If
    Next
    Set olApp = Nothing: Set olNS = Nothing: Set olAdd = Nothing
End Function

欠点は、GAL が非常に大きい場合、時間がかかることです。
最初にリストを配列にダンプしてから、そこから操作できるかどうかを確認します。
または、他の方法を使用してエイリアス経由で名前を取得する別の方法がある場合。
でも今は、まずはここから学んでみてください。

これは関数なので、テキストボックスに入れるには、次のようにするだけです:

TextBox2 = GetFullname(TextBox1)

注:
意図的にすべてのオブジェクトを宣言しました。作業しているオブジェクトのタイプを知る必要があります。また、On Error Resume NextAddressEntryを使用しました。これは、エラーが発生しないためAliasです。それが今のところ私が考えることができる最も簡単な回避策です。

要件:
を参照する必要がありますMicrosoft Outlook xx.x Object Library
xx.xマシンにインストールされている Outlook のバージョンによって異なります。

于 2016-06-29T06:11:13.517 に答える