Как получить информацию из поля «Инициалы» в адресной книге oulook с помощью Excel VBA - PullRequest
0 голосов
/ 02 ноября 2019

Я клерк и немного подумал о себе как о Excel-VBA, чтобы автоматизировать некоторые задачи в офисе.

Однако, когда я «кодировал», я наткнулся на проблему, что я не могу получить информациюуказано в поле Инициалы из адресной книги Outlook с помощью vba. Когда вы нажимаете на запись в адресной книге Outlook, появляется всплывающее окно с информацией о пользователе. С помощью vba я мог легко получить доступ ко всем полям, кроме поля «Инициалы».

Вот окно с полем, обозначенным красным AddressBookInformationJohnDoe

Один сценарий, который я написал, извлекает информацию о сотруднике в моей компании и копирует ее в ячейки рядом с именем сотрудника. (См. Упрощенный код ниже. Код, который, очевидно, не работает, закомментирован и заканчивается знаком вопроса.)

Sub GetInfoUserShort()


Dim olApp           As Outlook.Application
Dim olNS            As Outlook.Namespace
Dim olRecip         As Outlook.Recipient

Dim Cell            As Range
Dim NameEmpl        As String
Dim Company         As String
Dim Initials        As String

NameEmpl = LCase(Trim(ActiveCell.Value))

Set olApp = CreateObject("Outlook.Application")
Set olNS = olApp.GetNamespace("MAPI")

Set olRecip = olNS.CreateRecipient(NameEmpl)
olRecip.Resolve

Company = olRecip.AddressEntry.GetExchangeUser.CompanyName
'Initials = olRecip.AddressEntry.GetExchangeUser.Initials ?

    ActiveCell.Offset(0, 1).Value = Company
    'ActiveCell.Offset(0, 2).Value = Initials ?

End Sub

Однако в GetExchangeUser я не могу найти объект для поля инициалов. Есть ли другой способ извлечения информации?

Я видел подобные вопросы на этом форуме, но не мог точно следовать предложенным ответам.

Кроме того, я должен отметить, что проблему нельзя решить, используя первые буквы имени. Компания предоставляет каждому сотруднику определенную аббревиатуру, сопоставимую с идентификатором, и эта аббревиатура сохраняется в поле «Инициалы».

1 Ответ

0 голосов
/ 02 ноября 2019

Просто извлеките первые буквы имени и фамилии:

set eu = olRecip.AddressEntry.GetExchangeUser
Company = eu.CompanyName
initials = ""
if Len(eu.FirstName) > 0 Then initials = Mid(eu.FirstName, 1, 1)
if Len(eu.LastName)  > 0 Then initials = initials & Mid(eu.LastName, 1, 1)
MsgBox initials

Если вам нужны инициалы, заданные явно для пользователя GAL, вы можете прочитать свойство MAPI PR_INITIALS (имя DALS http://schemas.microsoft.com/mapi/proptag/0x3A0A001F) используя AddressEntry.PropertyAccessor.GetProperty. Будьте готовы обработать исключения, если свойство не задано для этого пользователя GAL. Если инициалы хранятся в каком-либо другом свойстве MAPI, вы можете увидеть его значение и определить его имя DASL, используя OutlookSpy (вы можете нажать IMAPISession | QueryIdentity или перейти к пользователю GAL после нажатия кнопки IAddrBook).

initials = olRecip.AddressEntry.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3A0A001F")
...