|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 aman1516 于 2016-7-23 23:13 编辑
按金蝶导出的标准BOM格式,及按 三坛老窖 老师的代码改了一下,结果是出来了,但我是多转换一次数组格式实现的,请教下 三坛老窖 老师,能否直接按金蝶导出的BOM格式优化代码,详见附件:
- <P>Option Explicit</P>
- <P>Sub pt()
- Dim Inv, bom1, Proj, dicInv, BOM
- Dim i, j, d, k1, k2, temp, r, r1, r2, z, m, n, p
- '读取数据
- bom1 = Sheet1.Range("A1:H" & Sheet1.Range("A" & Rows.Count).End(xlUp).Row + 1) 'BOM
- ReDim BOM(1 To UBound(bom1), 1 To UBound(bom1, 2) + 1)
- z = 0
- For m = 2 To UBound(bom1)
- If bom1(m, 2) = "代码" Then
- r1 = m + 4
- For n = r1 To UBound(bom1)
- If bom1(n, 1) = "" Then
- r2 = n - 1
- Exit For
- End If
- Next
- For k1 = r1 To r2
- z = z + 1
- BOM(z, 1) = bom1(m + 1, 2)
- For k2 = 2 To UBound(bom1, 2) + 1
- BOM(z, k2) = bom1(k1, k2 - 1)
- Next
- Next
- End If
- Next
- 'Sheet1.Range("N2:Z" & Rows.Count).ClearContents
- 'Sheet1.Range("N2").Resize(z, UBound(BOM, 2)) = BOM
- Sheet2.Range("F2:F" & Rows.Count).ClearContents
- Inv = Sheet2.Range("A2:E" & Sheet2.Range("A" & Rows.Count).End(xlUp).Row) '物料即时库存
- Proj = Sheet3.Range("A2:C" & Sheet3.Range("A" & Rows.Count).End(xlUp).Row) '生产计划产品
-
- '创建库存字典
- Set dicInv = CreateObject("Scripting.Dictionary")
- For d = 1 To UBound(Inv)
- dicInv(Inv(d, 1)) = Inv(d, 5)
- Next</P>
- <P>'计算各产品的最多可生产数量
- For i = 1 To UBound(Proj)
- '求取该产品的最多可生产数量
- temp = 9999999#
- For j = 1 To UBound(BOM)
- If Proj(i, 1) = BOM(j, 1) Then
- If dicInv.exists(BOM(j, 2)) And temp > dicInv(BOM(j, 2)) / BOM(j, 6) Then
- temp = dicInv(BOM(j, 2)) / BOM(j, 6)
- End If
- End If
- Next
- Proj(i, 3) = temp
- For p = 1 To UBound(BOM)
- If Proj(i, 1) = BOM(p, 1) Then
- dicInv(BOM(p, 2)) = dicInv(BOM(p, 2)) - temp * BOM(p, 6)
- End If
- Next
- Next
-
- '输出所有产品的最多可生产数量和剩余库存
- Sheet2.Range("F2:F" & Rows.Count).ClearContents
- Sheet2.Range("F2:F" & UBound(Inv) + 1) = Application.WorksheetFunction.Transpose(dicInv.items)
- Sheet3.Range("A2").Resize(UBound(Proj), 3) = Proj</P>
- <P>End Sub</P>
- <P> </P>
复制代码
库存可配套产品数2016 - 副本.rar
(55.02 KB, 下载次数: 72)
|
|