我正在尝试创建一个VBA宏,它将查看A列,查找所有唯一的电子邮件地址,为每个电子邮件地址创建一个新的Outlook电子邮件,并使用该电子邮件所在的行填充该电子邮件的正文(还包括 Headers ) ) .
示例数据:
+----------------+---------------------+---------+
| Email | Application | Version |
+----------------+---------------------+---------+
| test1@test.com | Microsoft_Office_13 | v2.0 |
| test1@test.com | Putty | v3.0 |
| test1@test.com | Notepad | v5.6 |
| test2@test.com | Microsoft_Office_13 | v2.0 |
| test2@test.com | Putty | v3.0 |
| test2@test.com | Adobe_Reader | v6.4 |
| test3@test.com | Microsoft_Office_13 | v3.6 |
| test3@test.com | Paint | v6.4 |
| test3@test.com | Adobe_Reader | v6.4 |
+----------------+---------------------+---------+
这是我在研究中能够找到的,但每次列出地址时都会创建一封电子邮件 . 它也没有任何代码可以显示如何将一系列细胞拉入体内 .
Sub Test1()
Dim OutApp As Object
Dim OutMail As Object
Dim cell As Range
Application.ScreenUpdating = False
Set OutApp = CreateObject("Outlook.Application")
On Error GoTo cleanup
For Each cell In Columns("A").Cells.SpecialCells(xlCellTypeConstants)
If cell.Value Like "?*@?*.?*" And _
LCase(Cells(cell.Row, "C").Value) = "yes" Then
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = cell.Value
.Subject = "Reminder"
.Body = "Hi, please find your account permissions below:"
.Display
End With
On Error GoTo 0
Set OutMail = Nothing
End If
Next cell
cleanup:
Set OutApp = Nothing
Application.ScreenUpdating = True
End Sub
所需的电子邮件输出将是这样的:
嗨,请在下面找到您的帐户权限:
+----------------+---------------------+---------+
| Email | Application | Version |
+----------------+---------------------+---------+
| test2@test.com | Microsoft_Office_13 | v2.0 |
| test2@test.com | Putty | v3.0 |
| test2@test.com | Adobe_Reader | v6.4 |
+----------------+---------------------+---------+
3 回答
你可以用不同的方式做到这一点,但我只是给你一个快速的答案来解决你的问题 . 我使用Ron de Bruin开发的函数将范围转换为html体 .
我删除了其中一个条件来检查A列中单元格的内容,因此请确保将其放回并使用您自己的数据进行测试
我使用字典存储我们生成outlook实例的电子邮件,因此如果在其他单元格中您有相同的电子邮件,则不会再生成电子邮件
你需要在outlook新项目中使用html body而不是body,这样你就可以有更多的选项来快速粘贴你的内容并对其进行格式化(颜色,大小,字体等)
我使用了评论中提到的answer中的代码并对其进行了修改 . 创建一个类并将其命名为AppInfo . Here你发现如何做到这一点
然后将以下代码放入模块中 . 假设数据位于活动工作表中,从A1开始, Headers 为Email,Application和Version .
在我看来,最简单的方法是将表格格式化为Excel中的表格(这将启用搜索和排序) . 然后你可以做一些像
如果执行使它超过了检查(data.Rows.Count> 0),那么您可以使用HTML发送邮件:
这需要以下辅助函数:
您可以根据需要进行修改 .