получение адреса электронной почты из внешнего вида через пользовательскую форму - PullRequest
0 голосов
/ 31 августа 2018

Я хотел бы спросить, есть ли способ извлечь адрес электронной почты из адресной книги outlook из значений, введенных в текстовое поле формы пользователя, и получить его.

Например, у моего textbox1 есть пользователь, который вводит полные имена людей, которых он хочет найти, и с помощью кнопки поиска у textbox2 будут все адреса электронной почты, извлекаемые из адресной книги outlook на основе textbox1.

В настоящее время у меня есть вызов модуля получения электронной почты

 Option Explicit
Sub GetAddresses()
    Dim o, AddressList, AddressEntry
    Dim c As Range, r As Range, AddressName As String
    Set o = CreateObject("Outlook.Application")
    Set AddressList = o.Session.AddressLists("Contacts")
    'Chage this range to include the first names only. AddressName assignment line handles concatenating the last name.
    Set r = Add.Emailname
    For Each c In r
        AddressName = c.Value & " " & c.Offset(0, 1).Value
        For Each AddressEntry In AddressList.AddressEntries
            If AddressEntry.name = AddressName Then
                c.Offset(0, 2).Value = AddressEntry.Address
                Exit For
            End If
        Next AddressEntry
    Next c
End Sub

И в моей форме пользователя кнопка поиска

Private Sub Searchbutton_Click()
Call GetAddresses
End Sub

Код - это то, что я видел в Интернете. Может ли кто-нибудь помочь мне отредактировать и направить меня?

1 Ответ

0 голосов
/ 31 августа 2018

Я вижу, вы скопировали ваш код. Этот код предназначен для обхода диапазона. Вы можете просто удалить цикл и ввести значение текстового поля и назначить его своей кнопке поиска. Однако вам понадобится .ListBox1 (вместо .TextBox2), поскольку вы хотите, чтобы все попадания в контакте отображались в списке. Я также реализовал функцию .Instr, чтобы увидеть, появляется ли значение поиска в имени контакта (чтобы убедиться, что используется LCase). Это облегчит поиск только по фамилии. Код будет выглядеть так:

Option Explicit
Private Sub GetAddresses()
Dim o, AddressList, AddressEntry
Dim AddressName As String
Set o = CreateObject("Outlook.Application")
Set AddressList = o.Session.AddressLists("Contacts")
 'Change this range accordingly
AddressName = UserForm1.TextBox1.Value
For Each AddressEntry In AddressList.AddressEntries
    If InStr(1, LCase(AddressEntry.Name), LCase(AddressName)) <> 0 Then
        UserForm1.ListBox1.AddItem AddressEntry.Address
    End If
Next AddressEntry
End Sub

Private Sub Searchbutton_Click()
UserForm1.ListBox1.Clear
Call GetAddresses
End Sub
...