2015-06-18 3 views
1

Я использую VBA в Excel 2010 с Outlook 2010 (уже открыт).Открытие адресной книги Outlook из Excel

Как я мог бы написать саб для командной кнопки, так что, когда пользователь нажимает на нее: открывает

1 Перспективы адресной книги;
2 Пользователь выбирает контакт и нажимает ok;
3 Имя, фамилия и адрес электронной почты контакта хранятся в ячейках активного рабочего листа?

Я попытался с помощью этого метода без успеха: SelectNamesDialog Object

Кроме того, я не уверен, что мне нужно использовать: Application.GetNamespace("MAPI")

Решение: Вот как получить все детали из выбранного контакт в GAL:

Вам необходимо открыть глобальный список адресов, а не контакты из папки контактов, а также использовать объект Outlook.ExchangeUser, как описано в this page: см. последний ответ от David Zeme нс.

Private Sub cmdSetProjectMember1_Click() 

    Dim olApp As Outlook.Application 
    Dim oDialog As SelectNamesDialog 
    Dim oGAL As AddressList 
    Dim myAddrEntry As AddressEntry 
    Dim exchUser As Outlook.ExchangeUser 

    Dim AliasName As String 
    Dim FirstName As String 
    Dim LastName As String 
    Dim EmailAddress As String 

    Set olApp = GetObject(, "Outlook.Application") 
    Set oDialog = olApp.Session.GetSelectNamesDialog 
    Set oGAL = olApp.GetNamespace("MAPI").AddressLists("Global Address List") 

    With oDialog 
     .AllowMultipleSelection = False 
     .InitialAddressList = oGAL 
     .ShowOnlyInitialAddressList = True 
     If .Display Then 
      AliasName = oDialog.Recipients.Item(1).Name 
      Set myAddrEntry = oGAL.AddressEntries(AliasName) 
      Set exchUser = myAddrEntry.GetExchangeUser 

      If Not exchUser Is Nothing Then 
       FirstName = exchUser.FirstName 
       LastName = exchUser.LastName 
       EmailAddress = exchUser.PrimarySmtpAddress 
       '... 
       MsgBox "You selected contact: " & vbNewLine & _ 
        "FirstName: " & FirstName & vbNewLine & _ 
        "LastName:" & LastName & vbNewLine & _ 
        "EmailAddress: " & EmailAddress 
      End If 
     End If 
    End With 
Set olApp = Nothing 
Set oDialog = Nothing 
Set oGAL = Nothing 
Set myAddrEntry = Nothing 
Set exchUser = Nothing 
End Sub 

ответ

1

я написал решение чуть ниже моего вопроса.

+0

Благодарим за добавление решения! Нашел этот маленький кусочек вашего решения, очень полезный для моего приложения. 'oDialog.Recipients.Item (1) .Name' – Kelsius

3

Вы на правильном проспекте, то SelectNamesDialog именно то, что вы ищете. метод GetNamepsace равно свойству Session, используемого в примере кода:

Sub ShowContactsInDialog() 
    Dim oDialog As SelectNamesDialog 
    Dim oAL As AddressList 
    Dim oContacts As Folder 

    Set oDialog = Application.Session.GetSelectNamesDialog 
    Set oContacts = _ 
    Application.Session.GetDefaultFolder(olFolderContacts) 

    'Look for the address list that corresponds with the Contacts folder 
    For Each oAL In Application.Session.AddressLists 
    If oAL.GetContactsFolder = oContacts Then 
     Exit For 
    End If 
    Next 
    With oDialog 
    'Initialize the dialog box with the address list representing the Contacts folder 
    .InitialAddressList = oAL 
    .ShowOnlyInitialAddressList = True 
    If .Display Then 
     'Recipients Resolved 
     'Access Recipients using oDialog.Recipients 
    End If 
    End With 
End Sub 

Вы можете найти следующие статьи полезны:

+0

Этот код не будет работать на моем компьютере: Ошибка выполнения «438»: Объект не поддерживает это свойство или метод, на линии 'Set oDialog = Application.Session.GetSelectNamesDialog' Когда я заменить приложение на Outlook Я могу перейти к следующей строке, но не дальше. Я нашел способ [перечислить все контакты из GAL] [1] Я новичок в VBA, и я не понимаю, как получить свойства одного единственного контакта, выбранного из диалогового окна адресной книги. [1]: http://www.slipstick.com/developer/code-samples/use-vba-to-create-a-list-of-exchange-gal-members/ – user3019338

+0

После отображения Возврат Получатели коллекция будет содержать выбранных получателей. –

+0

Извините, я до сих пор не понимаю. Я должен заменить: 'Application.Session.GetSelectNamesDialog' на ' Outlook.Session.GetSelectNamesDialog' else Я получаю сообщение об ошибке. Тогда я получаю ошибку 438 в строке: 'Set oContacts = Application.Session.GetDefaultFolder (olFolderContacts)' После этого он 'oDialog.Recipients.Item.Имя', чтобы получить имя контакта и 'oDialog.Recipients.Item.Address', чтобы получить электронное письмо контакта? – user3019338

Смежные вопросы