В форме выберите список и нажмите F4, чтобы открыть диалоговое окно «Свойства». Измените BoundColumn на 1, ColumnCount на 2 и ColumnWidth на 0 пт; 72pt
Мы создаем два столбца: первый содержит адрес электронной почты, второй - имя. Первый скрыт. BoundColumn = 1 означает, что мы можем использовать ListBox1.Value, чтобы получить значение в первом столбце
В папке контактов может быть материал, который не является контактом, поэтому я немного изменил код, чтобы учесть это
Private Sub GetContacts()
Dim oOutlookApp As Outlook.Application
Dim oOutlookNameSpace As Outlook.NameSpace
Dim oContacts As Outlook.MAPIFolder
Dim oContact As Outlook.ContactItem
Dim i As Long
Set oOutlookApp = New Outlook.Application
Set oOutlookNameSpace = oOutlookApp.GetNamespace("MAPI")
'Get the contactfolder
Set oContacts = oOutlookNameSpace.GetDefaultFolder(olFolderContacts)
For i = 1 To oContacts.Items.Count
If TypeName(oContacts.Items(i)) = "ContactItem" Then
Set oContact = oContacts.Items(i)
Me.ListBox1.AddItem oContact.Email1Address
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = oContact.LastNameAndFirstName
End If
Next i
Set oContact = Nothing
Set oContacts = Nothing
Set oOutlookNameSpace = Nothing
Set oOutlookApp = Nothing
End Sub
Private Sub ListBox1_Click()
Me.TextBox1.Text = Me.ListBox1.Value
End Sub
Private Sub UserForm_Activate()
GetContacts
End Sub