Создать электронную почту с несколькими получателями из значений списка - PullRequest
0 голосов
/ 01 июля 2019

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

Я попытался поместить ссылку на столбец списка в строку ".To", но это дает нулевую ошибку. Затем я нашел некоторый код, который должен перебирать значения списка, но он не заполняет никаких получателей. Мои знания VBA ограничены, поэтому я могу неправильно использовать код цикла.

Public Sub cmdEmailContact_Click()

    Dim appOutLook As Outlook.Application
    Dim MailOutLook As Outlook.MailItem
    Dim strPath As String
    Dim strFilter As String
    Dim strFile As String
    Dim strFileEnd  As String
    Dim strEmailRecipients As String

    strPath = "C:\Users\username\Desktop\Invoice Test\GCX"
    strFilter = Me.txtInvNum
    strFileEnd = ".pdf"
    strFile = Dir(strPath & strFilter & strFileEnd)
    strEmailRecipients = ""
      For N = 0 To Me.lstContacts.ListCount - 1
         If Me.lstContacts.Selected(N) = True Then
            strEmailRecipients = strEmailRecipients & "; " & Me.lstContacts.Column(3, N)   
         End If
      Next N
    strEmailRecipients = Mid(strEmailRecipients, 3)

    If strFile <> "" Then

        Set appOutLook = CreateObject("Outlook.Application")
        Set MailOutLook = appOutLook.CreateItem(olMailItem)

        With MailOutLook
            .BodyFormat = olFormatRichText
            .To = strEmailRecipients
            ''.cc = ""
            ''.bcc = ""
            .Subject = "text here"
            .SentOnBehalfOfName = "emailname"
            .HTMLBody = "text here"
            .Attachments.Add (strPath & strFilter & strFileEnd)
            '.Send
            .Display 
        End With
    Else
        MsgBox "No file matching " & strPath & strFilter & strFileEnd & " found." & vbCrLf & _
                "Process has been stopped."
        Exit Sub   
    End If

End Sub

Я ожидаю, что strEmailRecipients будут равны списку писем, разделенных точкой с запятой, на основе списка, но он ничего не заполняет в генерируемой электронной почте. Нет сообщений об ошибках.

1 Ответ

0 голосов
/ 02 июля 2019

Вместо создания строки, разделенной точкой с запятой, для заполнения свойства To объекта MailItem вы можете вместо этого изменить содержимое * 1007.*Recipients коллекция при добавлении получателей (независимо от типа получателя) в объект MailItem.

Добавление элемента в Recipients сбор с использованием метода Add даст объект Recipient, который имеет свойство Type, которое можно использовать для обозначения получателя какили, cc или bcc, установив для свойства olTo, olCC или olBCC (или 1, 2 или 3 при использовании позднего связывания).

Следовательно, создание электронного письма может стать чем-то вроде следующего:

Dim idx
With MailOutLook
    With .Recipients
        For Each idx In lstContacts.ItemsSelected
            With .Add(lstContacts.ItemData(idx))
                .type = olTo
                .Address = lstContacts.ItemData(idx)
            End With
        Next idx
    End With
    .BodyFormat = olFormatRichText
    ' ... etc.
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...