大家好,今天是从零开始制作【出入库报表】第三课,上一课我们实现了出入库流水的增加功能。今天,我们来接着实现新的功能。有了出入库流水以后,我们就会涉及查找库位和和数量。首先为大家演示一下,完成以后的效果图。

图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的小技巧。

1.《如何做仓库报表、手机上怎么做仓库报表?》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《如何做仓库报表、手机上怎么做仓库报表?》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/3341046.html