Discoverer导出的多层BOM如何拼装为能够直接体现采购层的单层BOM?
Discoverer導出的多層BOM如何轉為能夠直接體現采購層的單層BOM?
這個標題可能有點拗口!
我們發現Discoverer導出的FG零件清單,只有第一層。
第一層的每個Phantom件又有其它Purchased Item,Reference Item,Phantom....
第二層,第三層也是如此。但是工作中我們需要一份Excel的物料Forecast,制作這份Forecast可以從Discrete Job中建立,馬上取消方式得到采購層的BOM。一個一個的操作顯然有點浪費時間,最后,我決定用VBA來重組Discoverer數據,這些都是供應鏈需要
具體步驟
一、固定格式,以后每次使用這個VBA都要遵守此格式。
1.1,Sheets(“BOM”)格式:
? ? ? ??
1.2,Sheets(“FC”)格式:
? ? ? ??
1.3,假設最終層為4層,Layer1,Layer2,Layer3都是過渡的Sheet,所以不做Title設定,Layer4格式:
? ? ? ??
?
二、VBA代碼部分:
2.1,建立FG下的BOM提取,代碼:
Sub FG_layer()Dim i, j, k As Integer Dim c As Range k = 1 Sheets.Add after:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = "Layer_1" For i = 1 To Sheets("FC").UsedRange.Rows.CountFor Each c In Sheets("BOM").Range("A:A")If c = Sheets("FC").Cells(i, 1) ThenSheets("BOM").Rows(c.Row).Copy Sheets("layer_1").Rows(k)k = k + 1End IfNext c Next i End Sub2.2,建立Layer1下的BOM,把Layer1下的物料清單從BOM中提取出來:
錯誤記錄:if A<>B then statement, ? ? Else出錯,因為這個else的符合的條件太多,建議使用Elseif condition
Sub Layer_1()'we have found all the layer1 under FG SKU, now we need to find all sub-layer under Layer1 Dim i, j, k As Integer Dim c As Rangek = 1 Sheets.Add after:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = "Layer_2"For i = 1 To Sheets("Layer_1").UsedRange.Rows.CountIf Sheets("Layer_1").Cells(i, 4) <> "Phantom item" ThenSheets("layer_2").Cells(k, 1) = Sheets("Layer_1").Cells(i, 1)Sheets("layer_2").Cells(k, 3) = Sheets("Layer_1").Cells(i, 2)Sheets("layer_2").Cells(k, 4) = Sheets("Layer_1").Cells(i, 3)Sheets("layer_2").Cells(k, 5) = Sheets("Layer_1").Cells(i, 4)k = k + 1ElseIf Sheets("Layer_1").Cells(i, 4) = "Phantom item" ThenFor Each c In Sheets("BOM").Range("A:A")If c = Sheets("Layer_1").Cells(i, 2) ThenSheets("layer_2").Cells(k, 1) = Sheets("Layer_1").Cells(i, 1)Sheets("layer_2").Cells(k, 2) = cSheets("layer_2").Cells(k, 3) = c.Offset(0, 1)Sheets("layer_2").Cells(k, 4) = c.Offset(0, 2) * Sheets("Layer_1").Cells(i, 3)Sheets("layer_2").Cells(k, 5) = c.Offset(0, 3)k = k + 1End IfNext cEnd If Next i End Sub三、把第二層下的子件也提取出來,If c = Sheets("Layer_2").Cells(i, 3),就是永遠都是把最新的層為依據去總BOM中查找。
Sub Layer_2() Dim i, j, k As Integer Dim c As Rangek = 1 Sheets.Add after:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = "Layer_3"For i = 1 To Sheets("Layer_2").UsedRange.Rows.CountIf Sheets("Layer_2").Cells(i, 5) <> "Phantom item" Then Sheets("layer_3").Cells(k, 1) = Sheets("Layer_2").Cells(i, 1)Sheets("layer_3").Cells(k, 4) = Sheets("Layer_2").Cells(i, 3)Sheets("layer_3").Cells(k, 5) = Sheets("Layer_2").Cells(i, 4)Sheets("layer_3").Cells(k, 6) = Sheets("Layer_2").Cells(i, 5) k = k + 1 ElseIf Sheets("Layer_2").Cells(i, 5) = "Phantom item" Then For Each c In Sheets("BOM").Range("A:A")If c = Sheets("Layer_2").Cells(i, 3) ThenSheets("layer_3").Cells(k, 1) = Sheets("Layer_2").Cells(i, 1)Sheets("layer_3").Cells(k, 2) = Sheets("Layer_2").Cells(i, 2)Sheets("layer_3").Cells(k, 3) = cSheets("layer_3").Cells(k, 4) = c.Offset(0, 1)Sheets("layer_3").Cells(k, 5) = c.Offset(0, 2) * Sheets("Layer_2").Cells(i, 4)Sheets("layer_3").Cells(k, 6) = c.Offset(0, 3) k = k + 1 End IfNext cEnd IfNext i End Sub四、同理,把第三層下Phantom的子件提取出來,沒有子件的purchased、Reference就直接拷貝到新的Sheet中:
Sub layer_3()Dim i, j, k As Integer Dim c As Rangek = 1 Sheets.Add after:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = "Layer_4"For i = 1 To Sheets("Layer_3").UsedRange.Rows.CountIf Sheets("Layer_3").Cells(i, 6) <> "Phantom item" ThenSheets("layer_4").Cells(k, 1) = Sheets("Layer_3").Cells(i, 1)Sheets("layer_4").Cells(k, 5) = Sheets("Layer_3").Cells(i, 4)Sheets("layer_4").Cells(k, 6) = Sheets("Layer_3").Cells(i, 5)Sheets("layer_4").Cells(k, 7) = Sheets("Layer_3").Cells(i, 6)k = k + 1ElseIf Sheets("Layer_3").Cells(i, 6) = "Phantom item" ThenFor Each c In Sheets("BOM").Range("A:A")If c = Sheets("Layer_3").Cells(i, 4) ThenSheets("layer_4").Cells(k, 1) = Sheets("Layer_3").Cells(i, 1)Sheets("layer_4").Cells(k, 2) = Sheets("Layer_3").Cells(i, 2)Sheets("layer_4").Cells(k, 3) = Sheets("Layer_3").Cells(i, 3)Sheets("layer_4").Cells(k, 4) = cSheets("layer_4").Cells(k, 5) = c.Offset(0, 1)Sheets("layer_4").Cells(k, 6) = c.Offset(0, 2) * Sheets("Layer_3").Cells(i, 5)Sheets("layer_4").Cells(k, 7) = c.Offset(0, 3)k = k + 1End IfNext cEnd IfNext iSheets("layer_4").Rows(1).InsertSheets("layer_4").Cells(1, 1) = "FG"Sheets("layer_4").Cells(1, 2) = "Layer1"Sheets("layer_4").Cells(1, 3) = "Layer2"Sheets("layer_4").Cells(1, 4) = "Layer3"Sheets("layer_4").Cells(1, 5) = "Layer4"Sheets("layer_4").Cells(1, 6) = "Usage"Sheets("layer_4").Cells(1, 7) = "Item_Type"End Sub五、最后,我們用一個Sub S_total把上文的四個Sub按先后順序匯總起來,以后只要直接使用S_Total過程就可以了。
注意事項:
1,因為沒有加入Error處理語句(懶),所以必須保證每個物料的Item Type都是有參數的,不能是#N/A,不然報錯
2,運行完第四個Sub之后,Layer_4的清單中item Type應該只有Purchase和Reference
3,沒有加入Subassembly(需要單獨建工單的Item,如果需要加入,可以考慮與Phantom同屬性,至少在采購,物料計劃這個領域可以這樣認為)
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的Discoverer导出的多层BOM如何拼装为能够直接体现采购层的单层BOM?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 南邮ctf_南邮ctf we
- 下一篇: JAVA整理的笔记