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

如何用VBA将Excel中变动超10%的记录添加至Outlook邮件?

修改VBA代码实现筛选变动记录并生成指定格式的Outlook邮件

核心需求实现

  • 从「Weekly Changes」工作表中筛选E列变动幅度超过10%的记录
  • 按「部门 - 财年 - 产品 变动百分比」的层级格式分组整理内容
  • 生成符合示例排版的Outlook邮件正文

完整修改后的VBA代码

Sub SendWeeklyChangesEmail()
    Dim OutLookApp As Object
    Dim OutLookMailItem As Object
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim dept As String
    Dim fy As String
    Dim product As String
    Dim change As Double
    Dim emailBody As String
    Dim deptDict As Object ' 按部门分组存储数据
    Dim fyDict As Object   ' 按财年分组存储产品数据
    
    ' 初始化Outlook对象
    Set OutLookApp = CreateObject("Outlook.Application")
    Set OutLookMailItem = OutLookApp.CreateItem(0)
    
    ' 绑定目标工作表
    Set ws = ThisWorkbook.Worksheets("Weekly Changes")
    Set deptDict = CreateObject("Scripting.Dictionary")
    
    ' 获取数据最后一行(假设第一行为表头)
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' 遍历数据,筛选并分组
    For i = 2 To lastRow
        dept = ws.Cells(i, "A").Value ' 假设A列是部门
        fy = ws.Cells(i, "B").Value   ' 假设B列是财年(FY22/FY23)
        product = ws.Cells(i, "C").Value ' 假设C列是产品
        change = Abs(ws.Cells(i, "E").Value) ' 取E列变动幅度的绝对值
        
        ' 筛选条件:仅处理FY22/FY23且变动超过10%的记录
        If (fy = "FY22" Or fy = "FY23") And change > 0.1 Then
            changeStr = Format(change, "0%") ' 转换为百分比字符串
            
            ' 部门不存在则创建新的财年字典
            If Not deptDict.Exists(dept) Then
                Set fyDict = CreateObject("Scripting.Dictionary")
                deptDict(dept) = fyDict
            Else
                Set fyDict = deptDict(dept)
            End If
            
            ' 财年不存在则创建产品列表,否则追加产品信息
            If Not fyDict.Exists(fy) Then
                fyDict(fy) = product & " " & changeStr
            Else
                fyDict(fy) = fyDict(fy) & " - " & product & " " & changeStr
            End If
        End If
    Next i
    
    ' 构建邮件正文
    emailBody = "各位好:" _
              & "<br><br>" _
              & "每周变动情况:" _
              & "<br><br>"
    
    ' 遍历分组数据,生成正文内容
    For Each dept In deptDict.Keys
        Set fyDict = deptDict(dept)
        Dim firstFY As Boolean: firstFY = True
        
        For Each fy In fyDict.Keys
            If firstFY Then
                ' 首个财年显示部门名称
                emailBody = emailBody & dept & " - " & fy & " - " & fyDict(fy) & "<br>"
                firstFY = False
            Else
                ' 后续财年缩进对齐
                emailBody = emailBody & "          " & fy & " - " & fyDict(fy) & "<br>"
            End If
        Next fy
        emailBody = emailBody & "<br>" ' 部门间空行分隔
    Next dept
    
    ' 追加结尾
    emailBody = emailBody & "谢谢," _
              & "<br><br>" _
              & "本人"
    
    ' 设置邮件属性
    With OutLookMailItem
        .To = "" ' 填写收件人邮箱
        .Subject = "每周变动情况"
        .HTMLBody = emailBody
        .Display ' 显示邮件,如需直接发送可改为.Send
    End With
    
    ' 释放对象
    Set OutLookMailItem = Nothing
    Set OutLookApp = Nothing
    Set deptDict = Nothing
    Set fyDict = Nothing
    Set ws = Nothing
End Sub

关键说明

  • 列位置适配:代码默认A列=部门、B列=财年、C列=产品、E列=变动幅度(数值格式,如11%对应0.11),如果你的列位置不同,修改对应ws.Cells(i, "列标")即可
  • 分组逻辑:通过双层字典实现「部门→财年→产品」的层级分组,确保同一部门的财年信息集中展示
  • 格式匹配:用HTML标签<br>实现换行,通过空格实现缩进,完全匹配示例中的排版要求
  • 筛选逻辑:仅处理FY22/FY23的记录,且变动幅度绝对值超过10%(数值>0.1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:24:32