|
Day-Day 发表于 2014-9-3 21:16 
非常感谢、但是如若需要固定物料的所在行,就会出现问题,烦请再修改一下下。
谢谢、另外补充一点:根 ... - Sub 更新()
- Set dic1 = CreateObject("Scripting.Dictionary") '材料
- Set dic2 = CreateObject("Scripting.Dictionary") '产品
- r = Sheet2.Cells(Rows.Count, 3).End(3).Row
- arr = Sheet2.[c6].Resize(r - 5, 3)
- For i = 1 To UBound(arr)
- If Len(arr(i, 1)) > 0 Then
- dic1(arr(i, 1)) = i
- Else
- kcl = kcl + 1
- dic1("(空材料)_" & kcl) = i
- End If
- Next
- kcl = kcl + 1
- dic1("(空材料)_" & kcl) = i
- n1 = i ' + 1
- With Sheet3
- r = .Cells(Rows.Count, 1).End(3).Row - 1
- arr = .Range("A2:M" & r + 1) 'BOM数据
- End With
- For i = 2 To r
- If Len(arr(i, 1)) > 0 Then
- If Not dic1.exists(arr(i, 9)) Then
- n1 = n1 + 1
- dic1(arr(i, 9)) = n1
- End If
- If dic2.exists(arr(i, 1)) Then
- dic2(arr(i, 1)) = Array(dic2(arr(i, 1))(0), i)
- Else
- dic2(arr(i, 1)) = Array(i, i)
- End If
- End If
- Next
- With Sheet1
- endrow = .Cells(Rows.Count, 1).End(3).Row - 3
- crr = .Range("A4:AK" & endrow + 3) '日程计划数据
- End With
- ReDim drr(1 To n1, 7 To 38)
- For i = 3 To endrow
- If Len(crr(i, 1)) > 0 Then
- For j = 7 To 37
- If crr(i, j) > 0 Then
- qz = dic2(crr(i, 1)) '查产品对应BOM表的起止行号数组
- For k = qz(0) To qz(1)
- clxh = dic1(arr(k, 9))
- drr(clxh, j) = drr(clxh, j) + arr(k, 13) * crr(i, j)
- drr(clxh, 38) = drr(clxh, 38) + arr(k, 13) * crr(i, j)
- Next
- End If
- Next
- End If
- Next
- With Sheet2
- .UsedRange.Offset(5, 5).ClearContents
- dkey = dic1.keys
- For i = 0 To UBound(dkey)
- If Left(dkey(i), 6) = "(空材料)_" Then dkey(i) = ""
- Next
- .[c6].Resize(dic1.Count, 1) = Application.Transpose(dkey)
- .[f6].Resize(n1, 32) = drr
- End With
- End Sub
复制代码 |
|