|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 Moneky 于 2012-5-24 00:02 编辑
有点小问题,输出结果时,行号计算出了问题,导致明明算出应该是60根,但输出结果最大只有59根(数据中的最后一种规格也少了两根),还以为程序计算错误,找了N久,才发现结果输出时行号计算错误,导致少输出了2行。
还更新了统计信息,完成后提示信息更丰富了。
更新后的代码和附件如下:(其中的注释代码是调试的时候用的,可以完全删除注释代码,运行前还是需要手动将数据区域按长度倒序排列)
- Sub doMyWork()
- Dim cerr, hkrr
- Dim nowD As myData
- Dim myNo As Long, nowY As Long, nowR As Long, lngF As Long, lngMaxF As Long
- myNo = 1: nowR = 1
- nowY = 6000
- cerr = Range("c3:e" & [e3].End(xlDown).Row)
- Range("h3:l65536").ClearContents
- hkrr = Range("h3:l65536")
- nowD = getNowD(cerr)
-
- Do Until isOVER(cerr)
- ' DoEvents
- If nowY - nowD.长度 >= 0 And nowY - nowD.长度 <= 20 Then
- nowY = 0
- D_1 cerr, nowD
- '记录用钢信息
- hkrr(nowR, 1) = myNo
- hkrr(nowR, 2) = nowD.规格
- hkrr(nowR, 3) = nowD.长度
- hkrr(nowR, 4) = nowY
- ' hkrr(nowR, 6) = cerr(nowD.myIndex, 3)
- nowR = nowR + 1
- ' Cells(nowR + 1, 8) = myNo
- ' Cells(nowR + 1, 9) = nowD.规格
- ' Cells(nowR + 1, 10) = nowD.长度
- ' Cells(nowR + 1, 11) = nowY
-
- 'end
- If Not isOVER(cerr) Then
- myNo = myNo + 1 '原料编号+1
- nowY = 6000 '新原料长度
- nowD = getNowD(cerr)
- End If
- ElseIf nowY - nowD.长度 > 20 Then
- nowY = nowY - nowD.长度 - 20
- D_1 cerr, nowD
- '记录用钢信息
- hkrr(nowR, 1) = myNo
- hkrr(nowR, 2) = nowD.规格
- hkrr(nowR, 3) = nowD.长度
- hkrr(nowR, 4) = nowY
- ' hkrr(nowR, 6) = cerr(nowD.myIndex, 3)
- nowR = nowR + 1
- ' Cells(nowR + 1, 8) = myNo
- ' Cells(nowR + 1, 9) = nowD.规格
- ' Cells(nowR + 1, 10) = nowD.长度
- ' Cells(nowR + 1, 11) = nowY
- 'end
- nowD = getNowD(cerr)
- Else
- If Not isLastD(cerr, nowD) Then
- nowD = getNextD(cerr, nowD)
- Else
- '记录废弃钢材
- hkrr(nowR, 1) = myNo
- hkrr(nowR, 5) = nowY
- lngF = lngF + nowY
- lngMaxF = IIf(nowY > lngMaxF, nowY, lngMaxF) '记录最长浪费
- nowR = nowR + 1
- ' Cells(nowR + 1, 8) = myNo
- ' Cells(nowR + 1, 12) = nowY
- 'end
- myNo = myNo + 1 '新原来编号+1
- nowY = 6000
- nowD = getNowD(cerr)
- End If
- End If
- ' Cells(nowR + 1, 8).Select
- Loop
- Range("h3:l" & CStr(nowR + 1)) = hkrr '因为从第3行开始显示,所以转换行号。
- lngF = lngF + nowY '浪费的长度还要加上最后一根剩下的
- MsgBox "一共需要" & CStr(myNo) & "根6米长的钢材,总共浪费长度为:" & CStr(lngF) & "mm" & vbNewLine & _
- "最后一根剩余长度为:" & CStr(nowY) & "mm" & vbNewLine & _
- "除最后一根外,一根浪费最长为:" & CStr(lngMaxF) & "mm", vbInformation + vbOKOnly, "Eersoft-提示"
- End Sub
- Private Sub CommandButton1_Click()
- doMyWork
- End Sub
复制代码 |
评分
-
2
查看全部评分
-
|