Background:公司有多条的生产线,生产计划员将不同的客户或者不同类别的产品的每日排产放在不同的Line中,我们需要把不同产线的产品汇总起来,方便我们后续转换为物料的每日需求(需要和BOM相乘。
思路、要求:
1,读取每个Sheet,然后逐行读取需要的数据,找到不同Title的位置
2,找到需要开始的日期(通常Production Planning都会保留部分历史数据供后期查询),所以我们需要指定一个日期(比如Today)
3,整个程序需要使用Dictionary和数组,如果使用单元格或者Range,速度会有点慢。
4,每条Line,Sheet.name建议使用L1,L2,L3开头
5,历史数据,也就哪些Completed的产品如果不删掉,那么就放在下方,但是需要和WIP中的产品分开。
步骤:
1,新建一个Summary的sheet,用于存放汇总后的DPS(Daily Production Schedules)
2,打开VBE编辑器,双击Sheet1(Summmary)输入以下代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address <> "$H$1" Then Exit Sub
Dim i, j, arr(), brr, Joinx
Dim d1 As Date
Dim d
arr = Array("Line", "料品代号", "型号/描述", "QTY", "已完成", "未完成", "待包装")
Sheet1.Cells.ClearContents
Sheet1.[a1].Resize(1, 7) = arr
end Sub
解释:在selectionchange事件中,如果鼠标不是放在单元格H1,此事件不做任何动作,退出。
如果鼠标位于H1中(我已经Yellow高亮了H1),把数组填入到[A1:G1]中。
3,新建一个Merge的Sub(还是在Sheet1中),虽然有时我们可以在模块中,但是因为直接用的Sheet1存放数据,那么就直接在Sheet1处理。
Sub merge()
Dim d As Object
'存放SKU,key=SKU,Item&#