2016-06-29 3 views
-1

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

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

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

спасибо в продвинутом состоянии

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

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

+0

привет. Спасибо за ответ. Я не вижу в коде, где я могу выбросить textbox1.text (значение поиска для псевдонима). do объявить olmem = textbox1.text? – wh3resmycar2

+0

@ wh3resmycar2 Что я представил, это 'функция'. Он одинок. Включите его в код «UserForm», а затем вызовите его в любом из ваших событий (например, «CommandButton1_Click()») – L42