入库管理 根据编号查询

1 功能描述

输入入库单编号,点击[根据编号查询入库单]按钮。

img

查询结果如下。

img


查询结果包括两部分:

主表信息:供应商编号与名称、采购员编号与姓名、入库日期。

子表信息:商品入库的多条记录,包括:商品编号与名称…实际进价、数量与金额。


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:* * * * * *”