【发布时间】:2016-04-14 04:11:03
【问题描述】:
目前,我正在尝试创建要发送给客户的爆炸电子邮件,并且列列表中有一些重复的电子邮件地址。我只想向每个唯一的电子邮件地址发送一封电子邮件,但是当我运行我的宏时,它会为列中的每个单元格创建一封电子邮件,无论该列中早先/晚的地址是否重复。 我的代码的 sn-p 如下:
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
Set sh = Sheets("TestSheet")
Set OutApp = CreateObject("Outlook.Application")
For Each cell In sh.Columns("D").Cells.SpecialCells(xlCellTypeConstants)
Set rng = sh.Cells(cell.Row, 1).Range("E1:Z1")
If cell.Value Like "?*@?*.?*" And _
Application.WorksheetFunction.CountA(rng) > 0 Then
Set OutMail = OutApp.CreateItem(0)
Set Entity = cell.Offset(0, -3)
Set Quarter = cell.Offset(0, -2)
Set Year = cell.Offset(0, -1)
Set CCRecip = cell.Offset(0, 1)
strbody = "<font face = 'Calibri'><b>Hello All--</b>" & ...
signature = "<br>Thank you,<br>" & ...
.To = cell.Value
.CC = CCRecip.Value
.Subject = Entity.Value
.HTMLBody = strbody & signature
.display
End With
Set OutMail = Nothing
End If
Next cell
【问题讨论】:
-
将电子邮件地址存储在一个集合中,并在创建电子邮件之前检查该集合以查看它是否在其中。如果是,请跳过。
-
我使用的文件是根据系统报告创建的,并且一直在变化。它与逾期发票有关,因此客户可以在此电子表格上拥有多行。有超过 3000 行记录,每次运行时都可以添加多个新电子邮件地址(以及删除其他电子邮件地址)。因此,创建和维护地址集合可能会变得乏味。
-
你不维护它。您在代码中使用“集合”对象。我会添加一个答案。
-
为什么不先从您的电子邮件列表中“删除重复”?然后只需运行代码。 (或者,如果您也想保留原始列表,请复制电子邮件列,然后删除重复项)。或者,为什么不检查当前单元格上方的所有单元格,如果有
like或匹配项,则跳过当前行?