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

Excel宏需求:邮件发送后调整Available QTY并清理表单字段

Excel宏:发送邮件后调整库存并重置表单

需求说明

发送邮件并附加工作簿后,需在保存关闭前完成两项操作:

  • 清空姓名、位置等指定列内容
  • 将Available Qty列的值减去对应行的QTY Requested值

修改后的宏代码

Set objEmail = ObjOutlook.CreateItem(olMailItem)
    With objEmail
        .Importance = 2
        .To = "user1@abc.com;user2@abc.com"
        .Subject = strSubject
        .htmlBody = strHTML
        .Attachments.Add wb.FullName
        .Send
    End With

    ' 处理数量调整:Available Qty 减去 QTY Requested
    Dim tbl As ListObject
    Dim i As Long
    Set tbl = ThisWorkbook.ListObjects("Table1")
    
    ' 遍历表格数据行(跳过表头)
    For i = 1 To tbl.ListRows.Count
        ' 确保QTY Requested不为空且是数值,才执行减法
        If Not IsEmpty(tbl.ListRows(i).Range(tbl.ListColumns("QTY Requested").Index)) And _
           IsNumeric(tbl.ListRows(i).Range(tbl.ListColumns("QTY Requested").Index)) Then
            tbl.ListRows(i).Range(tbl.ListColumns("Available Qty").Index) = _
                tbl.ListRows(i).Range(tbl.ListColumns("Available Qty").Index) - _
                tbl.ListRows(i).Range(tbl.ListColumns("QTY Requested").Index)
        End If
    Next i

    ' 清空指定列内容(避免使用Select,直接操作Range)
    tbl.ListColumns("QTY Requested").DataBodyRange.ClearContents
    ' 清空从[SOS Project Manager]到[Notes]的列
    Dim startCol As Integer, endCol As Integer
    startCol = tbl.ListColumns("SOS Project Manager").Index
    endCol = tbl.ListColumns("Notes").Index
    tbl.DataBodyRange.Columns(startCol To endCol).ClearContents
    
    ThisWorkbook.Save
    ThisWorkbook.Close

End Sub

关键改进点

  • 直接操作Excel表格对象(ListObject)而非依赖Select,提升代码稳定性与执行效率
  • 遍历行时增加非空和数值判断,避免因空值或非数值内容导致运行报错
  • 通过列索引精准定位目标列,确保操作范围准确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:01:02