库存查询

1 技术场景

复杂查询,需要从多张表中查询数据。


2 功能描述

img

点击查询按钮,查询当前各商品当前的入库数量、出库数量、库存数量 以及库存金额。


商品编号、商品名称与进价 :信息来源为[A02商品]表中的所有商品的编号、名称、进价;

入库数:信息来源于[A0502入库明细]:针对每种商品进行入库数量求和;

出库数:信息来源于[A0602出库明细]:针对每种商品进行出库数量求和;

库存金额=库存数*进价。


3 主要步骤

步骤1:清除已有数据

步骤2:遍历数据存储表[A02商品]表

​ 步骤2-1:设置商品基本信息

​ 步骤2-2:通过公式从入库明细与出库明细中统计入库数与出库数

​ 步骤2-3:计算库存数与库存金额


4 完整代码

Sub query()
    Dim id As String
    Dim i As Integer
    Dim rowIndexLast As Integer
    Dim flag As Boolean
    flag = False
    
    '步骤1:清除已有数据
    If Not IsEmpty(Worksheets("B07库存查询").Range("B8").Value) Then
        rowIndexLast = Worksheets("B07库存查询").Range("B7").End(xlDown).Row
        Worksheets("B07库存查询").Rows("8:" & rowIndexLast).EntireRow.delete
    End If
    
    '步骤2:遍历数据存储表[A02商品]表
    rowIndexNew = 8

    For i = 2 To Worksheets("A02商品").Range("A1").End(xlDown).Row
        
        id = Worksheets("A02商品").Range("A" & i).Value
    
        '步骤2-1:设置商品基本信息
        
        '设置商品编号
        Worksheets("B07库存查询").Range("B" & rowIndexNew).Value = id
        '设置商品名称
        Worksheets("B07库存查询").Range("C" & rowIndexNew).Value = _
        	Worksheets("A02商品").Range("B" & i).Value
        '设置商品进价
        Worksheets("B07库存查询").Range("G" & rowIndexNew).Value = _
        	Worksheets("A02商品").Range("E" & i).Value
        
        '步骤2-2:通过公式从入库明细与出库明细中统计入库数与出库数
        
        '通过公式计算入库数量总和(从[A0502入库明细]表中)
        Worksheets("B07库存查询").Range("D" & rowIndexNew).Value = _
            Application.WorksheetFunction.SumIf( _
             Worksheets("A0502入库明细").Range("G:G"), id, Worksheets("A0502入库明细").Range("O:O"))
        '通过公式计算出库数量总和(从[A0602出库明细]表中)
        Worksheets("B07库存查询").Range("E" & rowIndexNew).Value = _
            Application.WorksheetFunction.SumIf( _
            	Worksheets("A0602出库明细").Range("G:G"), id, Worksheets("A0602出库明细").Range("O:O"))
        
        
        '步骤2-3:计算库存数与库存金额
        '计算库存数量总和
        Worksheets("B07库存查询").Range("F" & rowIndexNew).Value = _
            Worksheets("B07库存查询").Range("D" & rowIndexNew).Value - _
            Worksheets("B07库存查询").Range("E" & rowIndexNew).Value
        '计算库存金额
        Worksheets("B07库存查询").Range("H" & rowIndexNew).Value = _
            Worksheets("B07库存查询").Range("F" & rowIndexNew).Value * _
            Worksheets("B07库存查询").Range("G" & rowIndexNew).Value

        rowIndexNew = rowIndexNew + 1
    Next
    

    MsgBox "查询完成", Title:="小步教程www.xiaobuteach.com"

    
End Sub

5 代码讲解

Application.WorksheetFunction:用于执行Excel函数。


区别WorksheetFunction函数计算与Formular公式设置

WorksheetFunction:执行完成后,会得到一个值;当函数所引用的单元格变化,不会引起执行结果的变化。

Formular设置公式:当函数所引用的单元格变化时,此单元格的值会变化。

根据需求选择使用,这里我们需要的固定值,所以使用WorksheetFunction。


6 测试用例

正常用例:点击查询按钮,显示查询结果。

异常用例:无。