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, установленной на вашем компьютере.