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

扩展Excel VBA宏以显示物料号对应的全部多行关联数据

修改Excel VBA宏实现多行关联信息汇总与差异化提醒

问题背景

现有VBA宏通过扫描条码提取物料号,从SAP B1导入的Excel数据表查询信息,但仅返回同一物料号的单行数据,无法展示多行差异化关联信息(如不同压力等级、对应销售员工等)。需修改代码实现:

  • 底部文本框汇总所有匹配的关联信息
  • 存在差异化信息时,文本框变色提醒

修改思路

  • 遍历数据表中所有匹配目标物料号的行,逐行收集关联信息
  • 对比每行的关键字段(如压力等级、销售员工),判断是否存在差异化
  • 将汇总信息写入指定文本框,根据差异化结果设置文本框背景色

修改后的代码

Sub ScanAndQuery_Modified()
    Dim partNo As String
    Dim wsData As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim summaryText As String
    Dim hasDifference As Boolean
    Dim prevPressure As String, prevSalesEmp As String
    
    ' 获取扫描的物料号
    partNo = InputBox("扫描条码输入物料号")
    If partNo = "" Then Exit Sub
    
    ' 指定SAP数据所在工作表
    Set wsData = ThisWorkbook.Sheets("SAP数据")
    lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row
    
    ' 初始化汇总文本
    summaryText = "物料号:" & partNo & vbCrLf & vbCrLf
    hasDifference = False
    prevPressure = ""
    prevSalesEmp = ""
    
    ' 遍历数据表查找匹配项
    For i = 2 To lastRow ' 假设第1行为表头
        If wsData.Cells(i, "A").Value = partNo Then
            ' 追加当前行的关联信息
            summaryText = summaryText & "压力等级:" & wsData.Cells(i, "B").Value & " | 销售员工:" & wsData.Cells(i, "C").Value & vbCrLf
            
            ' 判断关键字段是否存在差异
            If prevPressure <> "" And wsData.Cells(i, "B").Value <> prevPressure Then
                hasDifference = True
            End If
            If prevSalesEmp <> "" And wsData.Cells(i, "C").Value <> prevSalesEmp Then
                hasDifference = True
            End If
            
            ' 更新对比基准值
            prevPressure = wsData.Cells(i, "B").Value
            prevSalesEmp = wsData.Cells(i, "C").Value
        End If
    Next i
    
    ' 处理无匹配结果的情况
    If summaryText = "物料号:" & partNo & vbCrLf & vbCrLf Then
        summaryText = "未找到对应物料的关联信息"
        hasDifference = False
    End If
    
    ' 更新底部文本框(假设文本框位于"查询界面"工作表,名称为txtSummary)
    With ThisWorkbook.Sheets("查询界面").txtSummary
        .Value = summaryText
        ' 根据差异化结果设置背景色
        If hasDifference Then
            .BackColor = RGB(255, 204, 204) ' 浅红色提醒
        Else
            .BackColor = RGB(255, 255, 255) ' 默认白色
        End If
    End With
End Sub

关键说明

  • 代码默认SAP数据表表头在第1行,物料号列是A列,压力等级列是B列,销售员工列是C列,请根据实际表格结构调整列号与工作表名称
  • 需提前在目标工作表创建并命名文本框为txtSummary,可根据实际展示需求调整文本框的大小与位置
  • 差异化判断逻辑可扩展:如需增加其他字段的差异检测,参照现有代码新增字段对比判断即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:55:26