大家好,今天是从零开始制作【出入库报表】第三课,上一课我们实现了出入库流水的增加功能。今天,我们来接着实现新的功能。有了出入库流水以后,我们就会涉及查找库位和和数量。首先为大家演示一下,完成以后的效果图。
图1 库位信息查询效果图
那我们是如何制作的呢?
这里,EK说一下思路。
1、查看库位信息主要涉及:“产品名称(QAD)”,“库位”、“库存数量”等方面。
2、这里我们通过“产品名称”来做标识。
3、逻辑关系:产品-库存数量= 【产品-入库数量】-【产品-出库数量】、产品-库位-库存数量= 【产品-库位-入库数量】-【产品-库位-出库数量】
4、理清逻辑关系。一步一步,进行功能实现。
下面,我们来实现查询库存库位信息
1、我们先给【入库流水账】和【出库流水账】中添加一下演示数据。如图2和图3.
图2 入库流水账演示数据
图3 出库流水账演示数据
3、在【库存跟踪表】中E2的公式为:E2=SUMIF(入库流水账!$A:$A,$A6,入库流水账!$E:$E)-SUMIF(出库流水账!$A:$A,$A6,出库流水账!E:E)。往下填充至最后一行。操作如下:
图4 公式效果图
4、打开VBE窗口,这里有两种方法。第一种,快捷键【ALT】+【F11】。第二种,点击[开发工具]选项卡中的[查看代码]。
5、在模块1中创建两个过程:
过程1 代码如下:
Sub 生成库位信息()
Dim ArrRK, ArrCK, ArrGZ, arrg, ArrFZ(), hrq, hcq, hgz
hrq = Sheets("入库流水账").Cells(Sheets("入库流水账").Rows.Count, 1).End(xlUp).Row '【入库流水账】第1列最后一行行号
hcq = Sheets("出库流水账").Cells(Sheets("出库流水账").Rows.Count, 1).End(xlUp).Row '【出库流水账】第1列最后一行行号
hgz = Sheets("库存跟踪表").Cells(Sheets("库存跟踪表").Rows.Count, 1).End(xlUp).Row '【库存跟踪表】第1列最后一行行号
Sheets("库存跟踪表").Range("f6:m" & hgz) = "" '清楚库存跟踪表的库位库存区域
'将入库流水中的数据赋值给数组
ArrRK = Sheets("入库流水账").Range("a2:g" & hrq)
ArrCK = Sheets("出库流水账").Range("a2:g" & hcq)
ArrGZ = Sheets("库存跟踪表").Range("f6:m" & hgz)
arrg = Sheets("库存跟踪表").Range("a6:m" & hgz)
Set d = CreateObject(";) '创建字典
'将库位、库存数量赋值给ArrFZ数组
For i = 1 To UBound(ArrRK)
If Not d.exists(ArrRK(i, 1) & "-" & ArrRK(i, 7)) Then
n = n + 1
d(ArrRK(i, 1) & "-" & ArrRK(i, 7)) = n
ReDim Preserve ArrFZ(1 To 3, 1 To n)
ArrFZ(1, n) = ArrRK(i, 1)
ArrFZ(2, n) = ArrRK(i, 7)
ArrFZ(3, n) = ArrRK(i, 5)
Else
m = d(ArrRK(i, 1) & "-" & ArrRK(i, 7))
ArrFZ(3, m) = ArrFZ(3, m) + ArrRK(i, 5)
End If
Next
For j = 1 To UBound(ArrCK)
If Not d.exists(ArrCK(j, 1) & "-" & ArrCK(j, 7)) Then
MsgBox "库位生成错误!错误信息:" & vbNewLine & "QAD:" & ArrCK(j, 1) & vbNewLine & "行号:" & j + 1 & vbNewLine & "库位号:" & ArrCK(j, 7)
Exit Sub
Else
m = d(ArrCK(j, 1) & "-" & ArrCK(j, 7))
ArrFZ(3, m) = ArrFZ(3, m) - ArrCK(j, 5)
End If
Next
For j = 1 To UBound(ArrFZ(), 2)
If ArrFZ(3, j) <> 0 Then
For i = 1 To UBound(arrg)
If ArrFZ(1, j) = arrg(i, 1) Then
If arrg(i, 6) = "" Then
arrg(i, 6) = ArrFZ(2, j)
ArrGZ(i, 1) = ArrFZ(2, j)
ArrGZ(i, 2) = ArrFZ(3, j)
ElseIf arrg(i, 8) = "" Then
arrg(i, 8) = ArrFZ(2, j)
ArrGZ(i, 3) = ArrFZ(2, j)
ArrGZ(i, 4) = ArrFZ(3, j)
ElseIf arrg(i, 10) = "" Then
arrg(i, 10) = ArrFZ(2, j)
ArrGZ(i, 5) = ArrFZ(2, j)
ArrGZ(i, 6) = ArrFZ(3, j)
ElseIf arrg(i, 11) = "" Then
arrg(i, 11) = ArrFZ(2, j)
ArrGZ(i, 7) = ArrFZ(2, j)
ArrGZ(i, 8) = ArrFZ(3, j)
Else
MsgBox "超出库位范围!请合理安排库位"
End If
End If
Next
End If
Next
Sheets("库存跟踪表").Range("f6").Resize(UBound(ArrGZ), UBound(ArrGZ, 2)) = ArrGZ
'释放数组内存
Erase ArrRK
Erase ArrCK
Erase arrg
Erase ArrFZ
MsgBox "数据生成完毕"
End Sub
过程2 代码如下
Sub 清空库位信息()
hgz = Sheets("库存跟踪表").Cells(Sheets("库存跟踪表").Rows.Count, 1).End(xlUp).Row '【库存跟踪表】第1列最后一行行号
Sheets("库存跟踪表").Range("f6:m" & hgz) = ""
End Sub
以上代码,已经经过测试,可以完成库位库存的生成。
图5 过程信息代码
6、 在【库存跟踪表】中添加两个按钮,名称分别为,“生成库位信息”,“清空库位信息”。按钮分别指定宏为过程1-生成库位信息和过程2 -清空库位信息。
操作步骤如下:
图6 插入控件
这里,我们就完成了,我们的库位和库存信息的生成与清空功能。
我们来看一下效果。
图7 效果图
到这里,我们今天所希望完成的表单功能,库位库存查询已经完成。明天我们接着来完善表单的其他功能。如果,有不懂的地方,可以在评论区告诉EK。如果想获得文中的文件,可以关注私信EK。
最后,感谢小伙伴们的观看,我是EK。如果上述内容能够帮助到你们,希望你们能点赞,关注,评论,转发,你们不清楚的地方我会尽力为大家解答,谢谢大家的支持。我会给大家带来更多关于EXCEL的小技巧。