Excel VBA, вернуть значение GAL

Я имею в виду очень простое маленькое приложение, которое поможет мне сэкономить время от перехода на вкладку Excel до Excel. я хочу создать небольшую пользовательскую форму, которая будет иметь текстовое поле для псевдонима пользователя обмена и вернуть полное имя пользователя обмена. Теперь проблема, с которой я столкнулся, заключается в том, что руководство в msdn немного расплывчато для пользовательской формы: https://msdn.microsoft.com/en-us/library/office/ff869721.aspx и я получаю некоторые сообщения об ошибках, некоторые исправили, активировав некоторые ссылки. и код довольно сложный.

так что в основном у меня есть 2 текстовых поля и кнопка. textbox1 примет псевдоним, textbox2 вернет имя пользователя после нажатия кнопки.

Есть несколько примеров, но большинство из них приведет к сбросу GAL в файл Excel, который мне не нужен.

заранее спасибо

1 ответ

Это даст вам то, что вы хотите.

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 Next, потому что есть AddressEntry без Alias и это дает ошибку. Это самая легкая работа, о которой я могу думать сейчас.

Требование:
Вам нужно ссылку Microsoft Outlook xx.x Object Library,
xx.x зависит от версии Outlook, установленной на вашем компьютере.

Другие вопросы по тегам