(已解決)錯誤1004 請教一下這一段code是否有邏輯錯誤
- 帖子
- 40
- 主題
- 13
- 精華
- 0
- 積分
- 69
- 點名
- 0
- 作業系統
- w7
- 軟體版本
- office07
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2012-4-24
- 最後登錄
- 2012-8-20
|
(已解決)錯誤1004 請教一下這一段code是否有邏輯錯誤
本帖最後由 m09903020 於 2012-6-21 20:36 編輯
不好意思,請問這一段有1004應用程式或物件定義上的錯誤 ...
不知道是什麼問題?QQ- Sub SAMAD()
- Dim myRange As Range
- For i = 1 To 299
- For Each c In Sheets("batch_pool").Range("A1:A" & [a1].End(xlDown).Row)'抓取5/10/50筆integer資料
- ordernum = Sheets("order_pool").Cells(i, 1)'抓取299筆資料位址
- Dim distance, SRD'距離公式用
- distance = 0
- SRD = 0
- If (ordernum > 0) And (ordernum < 3001) Then
- For j = 1 To 5
- temp = Worksheets("總訂單").Cells(ordernum + 1, j + 6) 'temp is 訂單中每筆item代號
- distance = Sheets("環境距離").Cells(c, temp + 2) '利用距離表對應出已距離
- SRD = distance + SRD 'summation's idea by formula
- Next j
- SRD = SRD / 5 'SRD of SAMAD's fomula
- Sheets("order_pool").Cells(i, 2) = SRD 'put into sheet
-
- ElseIf (ordernum >= 3001) And (ordernum < 6001) Then '10 items
- For j = 1 To 10
- temp = Worksheets("總訂單").Cells(ordernum + 1, j + 6)
- distance = Sheets("環境距離").Cells(c, temp + 2)
- SRD = distance + SRD
- Next j
- SRD = SRD / 10
- Sheets("order_pool").Cells(i, 2) = SRD
-
- ElseIf (ordernum >= 6001) And (ordernum < 9001) Then '50 items
- For j = 1 To 50
- temp = Worksheets("總訂單").Cells(ordernum + 1, j + 6)
- SRD = distance + SRD
- Next j
- SRD = SRD / 50
- Sheets("order_pool").Cells(i, 2) = SRD
- Else
- MsgBox "error這麼九很奇怪ㄟ你"
- End If
- Next
- Next i
- Set myRange = Worksheets("order_pool").Range("B1:B299")
- result = Application.WorksheetFunction.min(myRange)
- If (result.Address.Row > 0) And (result.Address.Row < 3001) Then
- Call cal_vol(ByVal 5)
- ElseIf (result.Address.Row >= 3001) And (result.Address.Row < 6001) Then
- Call cal_vol(ByVal 10)
- ElseIf (result.Address.Row >= 6001) And (result.Address.Row < 9001) Then
- Call cal_vol(ByVal 50)
- Else
- MsgBox "error這麼九很奇怪ㄟ你"
- End If
- End Sub
複製代碼 謝謝各位 |
|
|
|
|
|
|
- 帖子
- 1572
- 主題
- 16
- 精華
- 2
- 積分
- 1521
- 點名
- 0
- 作業系統
- xp
- 軟體版本
- office 2003
- 閱讀權限
- 150
- 性別
- 男
- 註冊時間
- 2010-5-1
- 最後登錄
- 2016-1-13

|
2#
發表於 2012-6-19 23:09
| 只看該作者
result = Application.WorksheetFunction.Min(myRange)
If (result.Address.Row > 0) And (result.Address.Row < 3001) Then
這裡就不合邏輯,沒有這樣表達的!
你應該在工作表上測試,看錯誤中斷在哪裡
光看代碼沒有文件很難找出所有問題。 |
|
|
|
|
|
|
- 帖子
- 40
- 主題
- 13
- 精華
- 0
- 積分
- 69
- 點名
- 0
- 作業系統
- w7
- 軟體版本
- office07
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2012-4-24
- 最後登錄
- 2012-8-20
|
3#
發表於 2012-6-20 16:16
| 只看該作者
回復 2# oobird
http://dl.dropbox.com/u/16247104/10000%20order_sortingalready.xlsm
因為程式過大 |
|
|
|
|
|
|
- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
4#
發表於 2012-6-20 17:14
| 只看該作者
回復 3# m09903020
建議 模組頂端加上 Option Explicit 強制宣告變數型態
幫你找找到一處 distance = Sheets("環境距離").Cells(c.Row, temp + 2).Value '利用距離表映射出距離
繼續下去因 2003的欄位只有 256 無法再除錯
請依下面程式設中斷點除錯- Sub SAMAD()
- Dim myRange As Range, c, ordernum, temp As Integer, result
- On Error GoTo ex: '---加上此行
- For i = 1 To 299
- For Each c In Sheets("batch_pool").Range("A1:A" & [a1].End(xlDown).Row)
- '
- '
- '
- '
- ElseIf (result.Address.Row >= 6001) And (result.Address.Row < 9001) Then
- Call cal_vol(ByVal 50)
- Else
- MsgBox "error這麼九很奇怪ㄟ你"
- End If
- '-------程式底部---------------------------
- Exit Sub '---加上此行
- ex: '---加上此行
- Resume '---加上此行''滑鼠選這裡按 F9 設下中斷點 有錯誤 按F8 來除錯
複製代碼 |
|
|
|
|
|
|
- 帖子
- 40
- 主題
- 13
- 精華
- 0
- 積分
- 69
- 點名
- 0
- 作業系統
- w7
- 軟體版本
- office07
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2012-4-24
- 最後登錄
- 2012-8-20
|
5#
發表於 2012-6-20 21:08
| 只看該作者
回復 4# GBKEE
謝謝大大解惑,我再 用 Option Explicit debug。 |
|
|
|
|
|
|
- 帖子
- 40
- 主題
- 13
- 精華
- 0
- 積分
- 69
- 點名
- 0
- 作業系統
- w7
- 軟體版本
- office07
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2012-4-24
- 最後登錄
- 2012-8-20
|
6#
發表於 2012-6-21 20:35
| 只看該作者
回復 2# oobird
謝謝OO大,我用您建議的方式重寫 發現我錯在 for each 的c 改成用寫死的for迴圈跑就沒問題了
還有那"亂測的"幾行判斷式我發現是自己搞錯F1的意思。 |
|
|
|
|
|
|