扩展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
相关产品推荐
相关产品推荐

