Обновление групп контактов в Outlook из файла Excel

У меня есть лист в файле Excel с именами и адресами электронной почты.

Мне нужно просмотреть лист и обновить контакты группы Outlook, соответствующие заголовкам.

Sub CreateOutlookContactGroups()
    
    Dim olApp As Object
    Dim olNS As Object
    Dim olContacts As Object
    Dim olDistList As Object
    Dim olRecip As Object
    Dim lastRow As Long
    Dim i As Long
    
    'Get Outlook application object
    Set olApp = CreateObject("Outlook.Application")
    Set olNS = olApp.GetNamespace("MAPI")
    Set olContacts = olNS.GetDefaultFolder(10) '10 = olFolderContacts
    
    'Get last row of email addresses
    lastRow = Cells(Rows.Count, "X").End(xlUp).Row
    
    'Loop through each column from E to L in row 4
    For i = 5 To 12 'Columns E to L
        If Range(Cells(4, i), Cells(4, i)).Value <> "" Then 'Check if there is a value in cell
            'Create or Get existing distribution list
            On Error Resume Next
                Set olDistList = olContacts.Items("IPM.DistList." & Range(Cells(4, i), Cells(4, i)).Value)
                If olDistList Is Nothing Then 'Create new distribution list
                    Set olDistList = olContacts.Items.Add("IPM.DistList")
                    olDistList.Save
                    olDistList.Subject = Range(Cells(4, i), Cells(4, i)).Value
                End If
            On Error GoTo 0
            
            'Add each email address from column X to distribution list if there is an "X" in the corresponding cell
            For j = 6 To lastRow 'Row 6 to last row with email addresses
                If Range(Cells(j, i), Cells(j, i)).Value = "X" Then 'Check if there is an "X" in cell
                    Set olRecip = olDistList.AddMember(CStr(Range(Cells(j, "X"), Cells(j, "X")).Value))
                    olDistList.Save
                End If
            Next j
        End If
    Next i
    
    'Release Outlook objects
    Set olRecip = Nothing
    Set olDistList = Nothing
    Set olContacts = Nothing
    Set olNS = Nothing
    Set olApp = Nothing
    
    MsgBox "Kontakt grupper uppdaterrade!"   
End Sub

Код перестает работать в

Set olRecip = olDistList.AddMember(CStr(Range(Cells(j, "X"), Cells(j, "X")).Value))

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

Отредактируйте сообщение, чтобы добавить макет данных, желательно в виде текста, а не изображения.
niton 24.04.2023 17:09

Как добавление набора данных поможет решить проблему. A6 «Имя фамилия» B6 «Город» C6 «X», если работает, как указано в заголовке C5 D6 «X», если работает, как указано в заголовке D5 E6 «X», если работает, как указано в заголовке E5 F6 «X», если работает, как указано в заголовке F5 G6 "X", если работает, как указано в заголовке G5 H6 "X", если работает, как указано в заголовке H5 I6 "X", если работает, как указано в заголовке I5 J6 "X", если работает, как указано в заголовке J5 K6 "X" ", если работает, как указано в заголовке K5 L6 "X", если работает, как указано в заголовке, L5 X6 "адрес электронной почты" В конце строки в столбце A есть член списка

Mirkaminer 25.04.2023 11:11
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
2
73
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Метод DistListItem.AddMember принимает экземпляр класса Recipient для добавления в список. Вы можете использовать метод NameSpace.CreateRecipient, который создает Recipient объект. Имя получателя может быть строкой, представляющей отображаемое имя, псевдоним или полный SMTP-адрес электронной почты получателя. Например:

Sub AddNewMember() 
 'Adds a member to a new distribution list 
 Dim objItem As Outlook.DistListItem 
 Dim objMail As Outlook.MailItem 
 Dim objRcpnt As Outlook.Recipient 
 
 Set objMail = Application.CreateItem(olMailItem) 
 Set objItem = Application.CreateItem(olDistributionListItem) 
 'Create recipient for distlist 
 Set objRcpnt = Application.Session.CreateRecipient("Eugene Astafiev") // or your email address
 objRcpnt.Resolve 
 objItem.AddMember objRcpnt 
 'Add note to list and display 
 objItem.DLName = "Northwest Sales Manager" 
 objItem.Body = "Regional Sales Manager - NorthWest" 
 objItem.Save 
 objItem.Display 
End Sub

Как мне заставить это работать? Я добавил библиотеку объектов Outlook, но она выдает ошибку «Set objMail = Application.CreateItem (olMailItem)» «Объект не поддерживает атрибут или метод». Какой-то тип ссылки для библиотек объектов должен отсутствовать?

Mirkaminer 27.04.2023 09:33

Убедитесь, что вы использовали экземпляр Outlook Application, а не экземпляр Excel.

Eugene Astafiev 27.04.2023 14:38

Обновленный код с измененным ответом Юджина:

Sub CreateOutlookContactGroups2()

Dim olApp As Object
Dim olNS As Object
Dim olContacts As Object
Dim olDistList As Object
Dim olRecip As Object
Dim lastRow As Long
Dim i As Long

'Get Outlook application object
Set olApp = CreateObject("Outlook.Application")
Set olNS = olApp.GetNamespace("MAPI")
Set olContacts = olNS.GetDefaultFolder(10) '10 = olFolderContacts

'Get last row of email addresses
lastRow = Cells(Rows.Count, "X").End(xlUp).Row

'Loop through each column from E to L in row 4
For i = 5 To 12 'Columns E to L
    If Range(Cells(4, i), Cells(4, i)).Value <> "" Then 'Check if there is a value in cell
        'Create or Get existing distribution list
        On Error Resume Next
            Set olDistList = olContacts.Items("IPM.DistList." & Range(Cells(4, i), Cells(4, i)).Value)
            If olDistList Is Nothing Then 'Create new distribution list
                Set olDistList = olContacts.Items.Add("IPM.DistList")
                olDistList.Save
                olDistList.Subject = Range(Cells(4, i), Cells(4, i)).Value
                olDistList.Save
            End If
        On Error GoTo 0
        
        'Add each email address from column X to distribution list if there is an "X" in the corresponding cell
        For j = 6 To lastRow 'Row 6 to last row with email addresses
            If Range(Cells(j, i), Cells(j, i)).Value = "X" Then 'Check if there is an "X" in cell
                'Set olRecip = olDistList.AddMember(CStr(Range(Cells(j, "X"), Cells(j, "X")).Value))
                Set olRecip = Outlook.Application.Session.CreateRecipient(CStr(Range(Cells(j, "X"), Cells(j, "X")).Value))
                olRecip.Resolve
                olDistList.AddMember olRecip
                olDistList.Save
            End If
        Next j
    End If
    Set olDistList = Nothing
Next i

'Release Outlook objects
Set olRecip = Nothing
Set olDistList = Nothing
Set olContacts = Nothing
Set olNS = Nothing
Set olApp = Nothing

MsgBox "Kontakt grupper uppdaterade!"

Конец сабвуфера

Другие вопросы по теме