入库管理 新增

1 功能描述

img

填写入库单的主表信息:入库单编号、供应商编号、采购员编号、入库日期;供应商名称、采购员姓名,会自动从数据存储工作表[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:* * * * * *”