入库管理 新增
1 功能描述
填写入库单的主表信息:入库单编号、供应商编号、采购员编号、入库日期;供应商名称、采购员姓名,会自动从数据存储工作表[A03供应商]、[A01员工]中根据编号自动读取名称。
供应商名称单元格公式:
=IFERROR(VLOOKUP($C$5,A03供应商!$A:$B, 2,0),"")
采购员姓名单元格公式:
=IFERROR(VLOOKUP($E$5,A01员工!$A:$B,2,0),"")
填写入库单的子表信息:商品编号、实际进价、数量,其余列根据公式自动计算。
第8行商品名称单元格公式:
=IFERROR(VLOOKUP($B8, A02商品!$A:$J,COLUMN(B1),0),"")
第8行商品类型单元格公式如下,非手动编写,是通过前一个单元格拖拽而来。
=IFERROR(VLOOKUP($B8, A02商品!$A:$J,COLUMN(C1),0),"")
右方与下方的商品相关列单元格都可通过拖拽单元格,自动运用公式。
第8行金额单元格公式:
=IF(I8*J8=0,"",I8*J8)
2 主要步骤
步骤1:校验,判断ID是否存在。
步骤2:保存主表(1条记录)
步骤3:保存明细表(多条记录)
3 完整代码
Sub insert()
Dim rowsCount, rowIndexNew As Integer
Dim amountTotal As Integer '小计数量
Dim moneyTotal As Integer '小计金额
'步骤1:校验,判断ID是否存在。
rowIndexLast = Worksheets("A0501入库").Range("A1").CurrentRegion.Rows.Count
'获取要查找的ID
id = Worksheets("B05入库管理").Range("B5").Value
'通过Find查找数据所在单元格
Set idCell = Worksheets("A0501入库").Range("A2:A" & rowIndexLast).Find(id, lookat:=xlWhole)
'如果找到,说明重复,停止执行
If Not idCell Is Nothing Then
MsgBox "ID重复,新增失败。ID:" & id
Exit Sub
End If
'步骤2:保存主表
rowIndexNew = Worksheets("A0501入库").Range("A1").CurrentRegion.Rows.Count + 1
Worksheets("A0501入库").Range("A" & rowIndexNew & ":F" & rowIndexNew) = Worksheets("B05入库管理").Range("B5:G5").Value
Worksheets("A0501入库").Range("G" & rowIndexNew & ":H" & rowIndexNew) = Worksheets("B05入库管理").Range("J18:K18").Value
'步骤3:保存明细表
'计算明细表新行的行号
rowIndexNew = Worksheets("A0502入库明细").Range("A1").CurrentRegion.Rows.Count + 1
For i = 8 To 17
If Not IsEmpty(Worksheets("B05入库管理").Range("B" & i)) Then
'商品相关信息
Worksheets("A0502入库明细").Range("G" & rowIndexNew & ":P" & rowIndexNew).Value = Worksheets("B05入库管理").Range("B" & i & ":K" & i).Value
'冗余主表信息
Worksheets("A0502入库明细").Range("A" & rowIndexNew & ":F" & rowIndexNew).Value = Worksheets("B05入库管理").Range("B5:G5").Value
rowIndexNew = rowIndexNew + 1
End If
Next
MsgBox "新增成功。", Title:="小步教程www.xiaobuteach.com"
End Sub
4 代码讲解
Worksheets("A0502入库明细").Range("A" & rowIndexNew & ":F" & rowIndexNew).Value=...
冗余主表信息。冗余:指重复存储,也可以不用重复存储。
冗余的优点:方便后续查询明细表信息,能够直接带上主表信息进行查询,开发效率与运行效率更高。
冗余的代价:占用更多的存储空间。
冗余的总结:空间换时间。
5 测试用例
正常用例:Id不存在时,在主表中添加一条记录,明细表中添加N条记录。
异常用例:ID存在时,提示“ID重复,新增失败。ID:* * * * * *”