入库管理 根据编号查询
1 功能描述
输入入库单编号,点击[根据编号查询入库单]按钮。
查询结果如下。
查询结果包括两部分:
主表信息:供应商编号与名称、采购员编号与姓名、入库日期。
子表信息:商品入库的多条记录,包括:商品编号与名称…实际进价、数量与金额。
2 主要步骤
步骤1:从入库主表[A0501入库]中查询主表信息(1条)
步骤1-1:存储工作表中,根据ID获取所在行
步骤1-2:复制查询结果数据,从存储工作表复制到管理工作表
步骤2:从入库明细表[A0502入库明细]中查询明细数据(多条)
步骤2-1:清空明细查询结果
步骤2-2:遍历明细表
步骤2-3:判断到所查行,各单元格进行赋值
3 完整代码
Sub load()
'声明变量
Dim id As String '要查询的ID
Dim rowIndexLast As Integer '最后一行的行号
Dim idCell As Range 'id所在单元格
Dim rowIndex As Integer 'id所在行
Dim rowIndexDetail As Integer '结果区明细表的行数
Dim i As Integer '循环变量
'步骤1:从入库主表[A0501入库]中查询主表信息
rowIndexLast = Worksheets("A0501入库").Range("A1").CurrentRegion.Rows.Count
If rowIndexLast = 1 Then
MsgBox "当前表中没有数据", Title:="小步教程 www.xiaobuteach.com"
Exit Sub
End If
'步骤1-1:存储工作表中,根据ID获取所在行
'获取要查找的ID
id = Worksheets("B05入库管理").Range("B5").Value
'通过Find查找数据所在单元格
Set idCell = Worksheets("A0501入库").Range("A2:A" & rowIndexLast).Find(id, lookat:=xlWhole)
'没有找到则停止执行
If idCell Is Nothing Then
MsgBox "没有找到数据,查询失败。ID:" & id
Exit Sub
End If
'打印单元格的行数
rowIndex = idCell.Row
Debug.Print ("rowIndex:" & rowIndex)
'步骤1-2:复制查询结果数据,从存储工作表到管理工作表
'供应商编号
Worksheets("B05入库管理").Range("C5").Value = Worksheets("A0501入库").Range("B" & rowIndex).Value
'采购员编号
Worksheets("B05入库管理").Range("E5").Value = Worksheets("A0501入库").Range("D" & rowIndex).Value
'入库日期
Worksheets("B05入库管理").Range("G5").Value = Worksheets("A0501入库").Range("F" & rowIndex).Value
'步骤2:从入库明细表[A0502入库明细]中查询明细数据
'2-1:清空明细查询结果
Worksheets("B05入库管理").Range("B8:B17,I8:J17").ClearContents
'2-2:遍历明细表
rowIndexDetail = 8
For i = 2 To Worksheets("A0502入库明细").Range("A1").End(xlDown).Row
'2-3:判断到所查行,各单元格进行赋值
If Worksheets("A0502入库明细").Range("A" & i).Value = id Then
'商品编号
Worksheets("B05入库管理").Range("B" & rowIndexDetail).Value = Worksheets("A0502入库明细").Range("G" & i).Value
'实际进价与数量
Worksheets("B05入库管理").Range("I" & rowIndexDetail & ":J" & rowIndexDetail).Value = Worksheets("A0502入库明细").Range("N" & i & ":O" & i).Value
rowIndexDetail = rowIndexDetail + 1
End If
Next
MsgBox "查询完成", Title:="小步教程www.xiaobuteach.com"
End Sub
4 代码讲解
Worksheets("B05入库管理").Range("B8:B17,I8:J17").ClearContents 先清除查询结果区域。有可能上次查询某个ID得到5条明细,这次查询另一个ID会得到2条明细,如果不清楚,则会保留上次的后3条明细。
5 测试用例
正常用例:ID存在时,正常从主表与明细表加载数据。
异常用例:ID不存在时,提示“没有找到数据,查询失败。ID:* * * * * *”