Несколько проблем.
Public Function getPOAccrualTemplate(MailTo As String, Optional CC As String, Optional BC As String, Optional Subject As String) As Object
который включает в себя Set getTemplate = OutMail
. Должно быть (несмотря на другие неэффективные методы кодирования):
Public Function getPOAccrualTemplate(MailTo As String, Optional CC As String, Optional BC As String, Optional Subject As String) As Object
Const TEMPLATE_PATH As String = "C:\Users\JohnDoe\Documents\Project\PO Accrual Push Back Email Template.oft"
Dim OutApp As Object
Dim OutMail As Object
Set OutMail = CreateObject("Outlook.Application").CreateItemFromTemplate(TEMPLATE_PATH)
With OutMail
.To = MailTo
.CC = CC
.BCC = BC
.Subject = Subject
End With
Set getPOAccrualTemplate= OutMail
End Function
Ваш цикл в SaveEmails
делает именно то, что вы просите, создавая несколько шаблонов. Каждый раз, когда у вас есть буква «Y», вы затем перебираете все строки и создаете электронное письмо, эффективно возводя в квадрат необходимое количество писем. Если я правильно понимаю вашу логику и таблицу данных, удаление цикла должно решить проблему с повторениями (несмотря на другое неэффективное кодирование).
If ReCol = "Y" Then
With ThisWorkbook.Worksheets("Report")
getTemplate(MailTo:=.Cells(Recol.Row, ecEmailAdresses), Subject:=.Cells(Recol.Row, ecSubject)).Save
End With
End If