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

Excel VBA批量发邮件:主题去重并嵌入对应A-D列数据需求

按主题合并发送邮件的VBA修正方案

核心改进点

  • 同一主题仅生成一封邮件,避免重复发送
  • 将对应主题的A-D列数据嵌入邮件正文
  • 修正邮箱列指向(从原代码的H列改为需求中的F列)

修正后的完整代码

Sub SendGroupedEmails()
    Dim OutApp As Outlook.Application
    Dim OutMail As MailItem
    Dim emailDict As Object ' 用于跟踪主题与对应邮件的映射
    Dim lr As Long, r As Long
    Dim subjectKey As String
    Dim rowContent As String
    Dim bodySignature As String
    
    ' 初始化Outlook应用和字典对象
    Set OutApp = New Outlook.Application
    Set emailDict = CreateObject("Scripting.Dictionary")
    
    lr = Cells(Rows.Count, "C").End(xlUp).Row
    bodySignature = "Thank you," & vbLf & "Xxx Xxx"
    
    ' 遍历数据行(从第6行开始)
    For r = 6 To lr
        subjectKey = Trim(Range("E" & r).Value)
        ' 格式化当前行A-D列内容为正文行
        rowContent = "A: " & Range("A" & r).Value & vbTab & _
                     "B: " & Range("B" & r).Value & vbTab & _
                     "C: " & Range("C" & r).Value & vbTab & _
                     "D: " & Range("D" & r).Value
        
        ' 判断当前主题是否已创建过邮件
        If emailDict.Exists(subjectKey) Then
            ' 已存在,将当前行内容追加到对应邮件正文
            Set OutMail = emailDict(subjectKey)
            OutMail.Body = OutMail.Body & vbLf & rowContent
        Else
            ' 不存在,新建邮件并初始化内容
            Set OutMail = OutApp.CreateItem(olMailItem)
            With OutMail
                .To = Range("F" & r).Value ' 指向需求中的F列邮箱
                .Subject = subjectKey
                .Body = "以下是对应主题的相关数据:" & vbLf & vbLf & rowContent & vbLf & vbLf
            End With
            ' 将新邮件存入字典,关联对应主题
            emailDict.Add subjectKey, OutMail
        End If
    Next r
    
    ' 为所有邮件添加签名并显示
    For Each OutMail In emailDict.Items
        OutMail.Body = OutMail.Body & bodySignature
        OutMail.Display
    Next OutMail
    
    ' 释放资源
    Set OutMail = Nothing
    Set emailDict = Nothing
    Set OutApp = Nothing
End Sub

关键逻辑说明

  1. 字典分组机制:利用Scripting.Dictionary存储每个主题对应的邮件对象,确保同一主题不会重复创建邮件。键为主题字符串,值为对应的MailItem对象。
  2. 正文数据嵌入:遍历每行时,将A-D列内容格式化为统一格式的文本行,若主题已存在则追加到已有邮件,否则作为新邮件的初始正文内容。
  3. 签名统一处理:所有邮件内容构建完成后,统一添加签名,避免重复写入签名内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 02:45:22