Outlook邮件收件人姓名填充问题:VB宏Excel批量发件求助
解决VB宏邮件正文添加收件人姓名的问题
我懂你现在的处境——VB宏发邮件的所有功能都跑通了,唯独卡在没法给邮件正文的"Hello"后面加上收件人的姓名,试了好多次都没成功对吧?别慌,咱们来把这个小问题解决掉。
问题根源&解决方案
这个问题大多是因为你还没把Excel表格里的收件人姓名正确提取并拼接进邮件正文里。假设你的Excel联系人列表中,姓名在某一列(比如B列,对应每行的联系人),咱们只需要在构建邮件正文的步骤里,把姓名变量插进去就行。
修改后的核心代码片段
下面是调整后的关键代码,重点看姓名提取和正文拼接的部分:
Sub SendEmailsWithData() Dim OutApp As Object Dim OutMail As Object Dim rng As Range Dim i As Integer Dim recipientEmail As String Dim recipientName As String ' 新增姓名变量 ' 初始化Outlook对象 Set OutApp = CreateObject("Outlook.Application") ' 循环遍历联系人行(假设从第2行开始,第1行是表头) For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row recipientEmail = Cells(i, 1).Value ' 假设邮箱在A列 recipientName = Cells(i, 2).Value ' 假设姓名在B列,根据你的实际列调整 ' 选取当前行对应的数据表范围,按需调整 Set rng = Sheets("数据").Range("A1:E10").Offset((i-2)*10, 0) ' 创建新邮件 Set OutMail = OutApp.CreateItem(0) ' 构建带姓名的邮件正文 strbody = "Hello " & recipientName & "," & vbNewLine & vbNewLine & _ "这是属于你的对应数据表:" & vbNewLine & vbNewLine & _ RangetoHTML(rng) & vbNewLine & vbNewLine & _ "有任何问题随时找我~" & vbNewLine & _ "感谢!" With OutMail .To = recipientEmail .Subject = "你的专属数据表" .HTMLBody = strbody .Send ' 测试阶段可以改成.Display,方便查看效果 End With Set OutMail = Nothing Next i Set OutApp = Nothing MsgBox "所有邮件已发送完成!" End Sub ' 把RangetoHTML函数粘贴到这里 Function RangetoHTML(rng As Range) ' 这里放你的RangetoHTML函数代码 End Function
关键注意事项
- 一定要根据你的实际表格列位置,调整
Cells(i, 2)里的列号(比如姓名在C列就改成3,D列改成4) - 循环的起始行
i=2是假设第1行是表头,如果你的表头行不同,记得修改这个数值 - 测试的时候可以把
.Send改成.Display,这样能先预览邮件效果,确认姓名显示正常再正式发送 - RangetoHTML函数必须放在宏代码的
End Sub之后,保证宏能正常调用这个函数生成HTML格式的表格
如果你的表格列布局和参考示例一致,直接对应列号调整就行,这样邮件正文里就会显示类似Hello 张三,的个性化开头啦!
内容的提问来源于stack exchange,提问作者Pratik Kuar
相关产品推荐
相关产品推荐

