入库管理 删除

1 功能描述

img

填写入库单编写,点击[删除入库单]按钮。

操作结果:删除主表[A0501入库]的一条记录,删除从表[A0502入库明细]的N条记录。


2 主要步骤

步骤1:删除主表[A0501入库]中的数据

步骤2:删除从表[A0502入库明细]中的数据


3 完整代码

Sub del()
    Dim rowsCount, rowIndexNew As Integer
    Dim idCell As Range
    Dim flag As Boolean
    flag = False

    '获取要查找的ID
    id = Worksheets("B05入库管理").Range("B5").Value

    '步骤1:删除主表[A0501入库]中的数据
    '通过当前区域获取新行的行号
    rowIndexLast = Worksheets("A0501入库").Range("A1").CurrentRegion.Rows.Count
    Debug.Print "rowIndexLast:" & rowIndexLast

    '查找单元格
    Set idCell = Worksheets("A0501入库").Range("A2:A" & rowIndexLast).Find(id, lookat:=xlWhole)
    
    If idCell Is Nothing Then
        MsgBox "id不存在,无法删除。id:" & id
        Exit Sub
    End If
    
    '删除行
    idCell.EntireRow.delete
    
    
    '步骤2:删除从表[A0502入库明细]中的数据

    rowIndex = 2
    Do While Not IsEmpty(Worksheets("A0502入库明细").Range("A" & rowIndex).Value)
        If Worksheets("A0502入库明细").Range("A" & rowIndex).Value = id Then
            Worksheets("A0502入库明细").Rows(rowIndex).delete
        Else
            rowIndex = rowIndex + 1
        End If
                
    Loop

    MsgBox "删除成功。", Title:="小步教程www.xiaobuteach.com"

End Sub

4 代码讲解

因为从表中需要删除多条记录,所以无法一直次调用Find来查找删除,通过While来遍历删除。

rowIndex = rowIndex + 1在删除时不需要,因为删除后,下一行会移到当前行,所以rowIndex无需改变。否则可能会出现跳行删除的情况。


5 测试用例

正常用例:ID存在时,主表删除一条记录,明细表删除N条记录。

异常用例:ID不存在时,提示“id不存在,无法删除。id:* * * * * *”