Board logo

標題: (已解決)錯誤1004 請教一下這一段code是否有邏輯錯誤 [打印本頁]

作者: m09903020    時間: 2012-6-19 15:55     標題: (已解決)錯誤1004 請教一下這一段code是否有邏輯錯誤

本帖最後由 m09903020 於 2012-6-21 20:36 編輯

不好意思,請問這一段有1004應用程式或物件定義上的錯誤 ...
不知道是什麼問題?QQ
  1. Sub SAMAD()
  2. Dim myRange As Range
  3. For i = 1 To 299
  4. For Each c In Sheets("batch_pool").Range("A1:A" & [a1].End(xlDown).Row)'抓取5/10/50筆integer資料
  5. ordernum = Sheets("order_pool").Cells(i, 1)'抓取299筆資料位址
  6. Dim distance, SRD'距離公式用
  7. distance = 0
  8. SRD = 0
  9. If (ordernum > 0) And (ordernum < 3001) Then
  10.     For j = 1 To 5
  11.     temp = Worksheets("總訂單").Cells(ordernum + 1, j + 6) 'temp is 訂單中每筆item代號
  12.     distance = Sheets("環境距離").Cells(c, temp + 2) '利用距離表對應出已距離
  13.     SRD = distance + SRD 'summation's idea by formula
  14.     Next j
  15.     SRD = SRD / 5 'SRD of SAMAD's fomula
  16.     Sheets("order_pool").Cells(i, 2) = SRD 'put into sheet
  17.    
  18. ElseIf (ordernum >= 3001) And (ordernum < 6001) Then '10 items
  19.     For j = 1 To 10
  20.     temp = Worksheets("總訂單").Cells(ordernum + 1, j + 6)
  21.     distance = Sheets("環境距離").Cells(c, temp + 2)
  22.     SRD = distance + SRD
  23.     Next j
  24.     SRD = SRD / 10
  25.     Sheets("order_pool").Cells(i, 2) = SRD
  26.    
  27. ElseIf (ordernum >= 6001) And (ordernum < 9001) Then '50 items
  28.     For j = 1 To 50
  29.     temp = Worksheets("總訂單").Cells(ordernum + 1, j + 6)
  30.     SRD = distance + SRD
  31.     Next j
  32.     SRD = SRD / 50
  33.     Sheets("order_pool").Cells(i, 2) = SRD
  34. Else
  35.         MsgBox "error這麼九很奇怪ㄟ你"
  36. End If
  37. Next
  38. Next i
  39. Set myRange = Worksheets("order_pool").Range("B1:B299")
  40.     result = Application.WorksheetFunction.min(myRange)
  41. If (result.Address.Row > 0) And (result.Address.Row < 3001) Then
  42. Call cal_vol(ByVal 5)
  43. ElseIf (result.Address.Row >= 3001) And (result.Address.Row < 6001) Then
  44. Call cal_vol(ByVal 10)
  45. ElseIf (result.Address.Row >= 6001) And (result.Address.Row < 9001) Then
  46. Call cal_vol(ByVal 50)
  47. Else
  48. MsgBox "error這麼九很奇怪ㄟ你"
  49. End If
  50. End Sub
複製代碼
謝謝各位
作者: oobird    時間: 2012-6-19 23:09

result = Application.WorksheetFunction.Min(myRange)
If (result.Address.Row > 0) And (result.Address.Row < 3001) Then
這裡就不合邏輯,沒有這樣表達的!
你應該在工作表上測試,看錯誤中斷在哪裡
光看代碼沒有文件很難找出所有問題。
作者: m09903020    時間: 2012-6-20 16:16

回復 2# oobird

http://dl.dropbox.com/u/16247104/10000%20order_sortingalready.xlsm
因為程式過大
作者: GBKEE    時間: 2012-6-20 17:14

回復 3# m09903020
建議 模組頂端加上   Option Explicit  強制宣告變數型態
幫你找找到一處 distance = Sheets("環境距離").Cells(c.Row, temp + 2).Value '利用距離表映射出距離
繼續下去因 2003的欄位只有 256  無法再除錯
請依下面程式設中斷點除錯
  1. Sub SAMAD()
  2. Dim myRange As Range, c, ordernum, temp As Integer, result
  3. On Error GoTo ex: '---加上此行
  4. For i = 1 To 299
  5. For Each c In Sheets("batch_pool").Range("A1:A" & [a1].End(xlDown).Row)
  6. '
  7. '
  8. '
  9. '
  10. ElseIf (result.Address.Row >= 6001) And (result.Address.Row < 9001) Then
  11. Call cal_vol(ByVal 50)
  12. Else
  13. MsgBox "error這麼九很奇怪ㄟ你"
  14. End If
  15. '-------程式底部---------------------------
  16. Exit Sub '---加上此行
  17. ex:           '---加上此行
  18. Resume   '---加上此行''滑鼠選這裡按 F9 設下中斷點 有錯誤  按F8 來除錯
複製代碼

作者: m09903020    時間: 2012-6-20 21:08

回復 4# GBKEE


   謝謝大大解惑,我再 用 Option Explicit debug。
作者: m09903020    時間: 2012-6-21 20:35

回復 2# oobird


    謝謝OO大,我用您建議的方式重寫 發現我錯在 for each 的c  改成用寫死的for迴圈跑就沒問題了

   還有那"亂測的"幾行判斷式我發現是自己搞錯F1的意思。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)