You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何通过Excel VBA实现逐行发送个性化邮件?

完成Excel个性化批量邮件发送的VBA代码

Got it, let's wrap up this email automation for you—your existing code is half the battle won. I'll fill in the gaps and explain how to tailor it to your spreadsheet structure so each row sends a fully personalized email.

完整代码示例

假设你的表格结构是:

  • A列:收件人邮箱地址
  • B列:收件人姓名(用于个性化称呼)
  • C列:邮件主题
  • D列:邮件正文(可包含像Hi [姓名]这类需要替换的个性化内容)
Sub SendEmails()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim cell As Range
    Dim recipientName As String
    Dim emailSubject As String
    Dim emailBody As String

    ' 关闭屏幕刷新,提升运行速度
    Application.ScreenUpdating = False
    
    ' 创建Outlook应用对象
    Set OutApp = CreateObject("Outlook.Application")
    
    ' 错误处理:如果出错跳转到清理环节
    On Error GoTo cleanup
    
    ' 遍历A列所有非空单元格(收件人邮箱)
    For Each cell In Columns("A").Cells.SpecialCells(xlCellTypeConstants)
        ' 跳过表头(如果第一行是表头的话,把1改成你的表头行数)
        If cell.Row = 1 Then GoTo nextCell
        
        ' 从对应行获取个性化内容
        recipientName = cell.Offset(0, 1).Value ' B列的姓名
        emailSubject = cell.Offset(0, 2).Value ' C列的主题
        emailBody = Replace(cell.Offset(0, 3).Value, "[姓名]", recipientName) ' D列正文,替换[姓名]为实际名字
        
        ' 创建新邮件
        Set OutMail = OutApp.CreateItem(0)
        
        On Error Resume Next ' 捕获发送时的错误(比如无效邮箱)
        With OutMail
            .To = cell.Value ' A列的收件人邮箱
            .Subject = emailSubject
            .Body = emailBody
            ' 如果你需要HTML格式邮件,把上面的.Body改成.HTMLBody,同时正文用HTML语法
            ' .HTMLBody = "<p>Hi " & recipientName & ",</p><p>" & cell.Offset(0,3).Value & "</p>"
            
            ' 测试阶段用.Display预览,没问题再改成.Send直接发送
            .Display
            ' .Send
        End With
        On Error GoTo 0 ' 重置错误处理
        
        ' 释放邮件对象
        Set OutMail = Nothing
        
nextCell:
    Next cell

cleanup:
    ' 释放Outlook对象,避免内存占用
    Set OutApp = Nothing
    ' 恢复屏幕刷新
    Application.ScreenUpdating = True
    MsgBox "邮件发送任务完成!"
End Sub

关键细节说明

  • 个性化内容替换:用Replace函数把正文中的占位符(比如[姓名])替换成对应行的实际数据,你可以根据需求添加更多占位符(比如订单号、金额等)。
  • 错误处理:On Error Resume Next会跳过发送失败的邮件(比如无效邮箱),不会中断整个批量任务;cleanup标签确保不管成功还是失败,都会释放Outlook对象,避免内存泄漏。
  • 测试建议:先使用.Display预览所有邮件,确认内容、收件人都正确后,再改成.Send批量发送。
  • 表头跳过:如果你的表格第一行是表头,保留If cell.Row = 1 Then GoTo nextCell;如果没有表头,直接删掉这一行即可。

使用注意事项

  1. 确保Outlook已经打开(代码依赖Outlook客户端)。
  2. 启用Excel宏:文件选项→信任中心→信任中心设置→宏设置→启用所有宏(或者按提示启用)。
  3. 如果你需要添加附件,可以在With OutMail块里加上.Attachments.Add "C:\路径\文件名.ext"。

内容的提问来源于stack exchange,提问作者Anthony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:00:15