Это будет общий подход, поскольку у нас нет ваших фактических данных.
Насколько я понимаю, для начала вы создаете цикл для данных случаев.Это не очень хороший способ ИМХО;если вы установите свой первый цикл в данных электронной почты, а затем установите второй цикл в данных дел, это будет намного проще обрабатывать дело.Второй цикл добавляет каждый случай к строке, которая впоследствии будет использоваться в качестве почтового тела.Условием является то, соответствует ли электронная почта дела тому, что вы зацикливаете за пределами.
После создания тела для одного электронного письма (и если тело не является нулевым), вы вызоветепроцедура отправки электронной почты.
Надеюсь, это поможет, если не попытаться предоставить образец из ваших данных, который я или кто-то мог бы создать функциональный код после этого.
РЕДАКТИРОВАТЬ: Так как у вас нет отдельной электронной почтысписок адресов, сначала вы должны создать массив писем, а затем использовать этот список в качестве внешнего цикла.У меня нет шансов попробовать, но приведенный ниже код должен как-то помочь вам начать работу с циклами, построением бодов по электронной почте и т. Д .:
Sub datesexcelvba()
' create a dictionary object of unique e-mails
Dim d As Object, c As Range, k, tmp As String
Set d = CreateObject("scripting.dictionary")
For Each c In Range("H:H").Cells
tmp = Trim(c.Value)
If Len(tmp) > 0 Then d(tmp) = d(tmp) + 1
Next c
For Each k In d.keys
' This is the outer loop of e-mails, the body shoul be constructed here and the e-mail should be sent at the end.
' I am keeping your inner loop since I assume that there is no problem with it
lastrow = Sheets("Messages english").Cells(Rows.Count, 1).End(xlUp).Row
For x = 2 To lastrow
If Cells(x, 4).Value = "Design" And Cells(x, 8).Value = k Then
myMail.Body = "Dcp No:" & Cells(x, 1).Value
myMail.Body = myMail.Body & " | Desc:" & Cells(x, 2).Value
myMail.Body = myMail.Body & " | Due Date:" & Cells(x, 7).Value
myMail.Body = myMail.Body & Chr(13) 'line feed
End If
Next x
If myEmail.Body <> "" Then Send_Mail k, "Task is due!", myMail.Body
Next k
End Sub
Function Send_Mail(ByVal email_recipient As String, ByVal email_subject, ByVal email_body As String)
Dim myApp As Outlook.Application
Set myApp = New Outlook.Application
Dim myMail As Outlook.MailItem
Set myMail = myApp.createItem(olMailItem)
With myMail
.To = email_recipient
.Subject = email_subject
.Body = email_body
'.Display
End With
Set myMail = Nothing
Set myApp = Nothing
End Function