入库管理 多条件查询

1 功能描述

img

我们针对从表[A0502入库明细]进行查询。

在查询条件区输入相应条件,如果相应值为空,表示不包含此属性条件。

点击[查询]按钮,下方表格会显示查询结果。


2 主要步骤

步骤1:清空原有的旧数据

步骤2:获取要查找的条件值

步骤3:遍历存储表中的所有行:如果符合条件,则添加到查询结果


3 完整代码

Sub query()
    Dim name As String
    Dim rowIndex As Integer
    Dim rowIndexDest As Integer
    Dim flag As Boolean
    
    '查询条件
    Dim supplyName As String '供应商
    Dim purchaserName As String '采购员
    Dim stockinDateBegin  '开始时间
    Dim stockinDateEnd  '结束时间
    Dim productName As String '商品
    
    '步骤1:清空原有的旧数据
    rowsIndexEnd = Worksheets("B05入库管理").Range("B33").End(xlDown).Row
    Worksheets("B05入库管理").Range("34:" & rowsIndexEnd).Rows.delete
    
    
    '步骤2:获取要查找的条件值
    supplyName = Worksheets("B05入库管理").Range("B28").Value
    purchaserName = Worksheets("B05入库管理").Range("C28").Value
    stockinDateBegin = Worksheets("B05入库管理").Range("D28").Value
    stockinDateEnd = Worksheets("B05入库管理").Range("E28").Value
    productName = Worksheets("B05入库管理").Range("F28").Value
    
    '步骤3:遍历存储表中的所有行
    rowIndex = 2
    rowIndexDest = 34
    Do While Not IsEmpty(Worksheets("A0502入库明细").Range("A" & rowIndex).Value)
        '判断是否符合条件
        flag = True
        flag = flag And ((supplyName = "") Or (InStr(Worksheets("A0502入库明细").Range("C" & rowIndex).Value, supplyName) > 0))
        flag = flag And ((purchaserName = "") Or (InStr(Worksheets("A0502入库明细").Range("E" & rowIndex).Value, purchaserName) > 0))
        
        flag = flag And ((stockinDateBegin = "") Or (stockinDateBegin <= Worksheets("A0502入库明细").Range("F" & rowIndex).Value))
        flag = flag And ((stockinDateEnd = "") Or (DateAdd("d", 1, stockinDateEnd) > Worksheets("A0502入库明细").Range("F" & rowIndex).Value))
        flag = flag And ((productName = "") Or (InStr(Worksheets("A0502入库明细").Range("H" & rowIndex).Value, productName) > 0))
        
        If flag Then
            '符合条件则添加到结果
            Worksheets("B05入库管理").Range("B" & rowIndexDest & ":Q" & rowIndexDest).Value = Worksheets("A0502入库明细").Range("A" & rowIndex & ":P" & rowIndex).Value
            rowIndexDest = rowIndexDest + 1
        End If
        rowIndex = rowIndex + 1
    Loop
    
    MsgBox "查询成功。", Title:="小步教程www.xiaobuteach.com"
        
End Sub

4 代码讲解


5 测试用例

正常用例1:所有查询条件为空,则查询结果为存储表所有数据。

正常用例2:依次输入各单个查询条件,则查询结果根据单个条件查询。

正常用例3:同时输入多个查询条件,则查询结果根据指定多个条件进行查询。