返回列表 上一主題 發帖

依訂單資料轉換成六週排程表,敬請各位大大賜教!!!

回復 16# p6703

我猜想是你的Sheet2!E2的日期比所有訂單日期的最小值還大,才會產生這樣結果
請上傳出錯檔案才能知道確實原因
學海無涯_不恥下問

TOP

感謝Hsieh兄的回覆,小弟按最新程式碼執行後,卻跑出"執行階段錯誤'9',陣列索引超出範圍",並停在ar(0, x) = ar(0, x) + A.Offset(, 3)此程式碼,因我現執行的筆數有快200筆,是有設限筆數嗎???

還有原提供報表中僅有"訂單","料號","項次"三資料,但如果要再增加幾筆資料,原程式碼是否即需再修改???

TOP

本帖最後由 Hsieh 於 2012-5-2 22:35 編輯

回復 14# p6703

如果以2010版本開啟檔案時,因為工作表的codename是"工作表1"、"工作表2"...等,並非"Sheet1"、"Sheet2"...等
所以出錯。
請檢查工作表的CodeName是否存在?

最後的發帖中已經改成使用工作表的Name屬性,若有錯誤請檢查工作表名稱。

學海無涯_不恥下問

TOP

先感謝Hsieh版主了,明日再測試看看,但上一個問題仍想請問,就是如單複製代碼,因何執行巨集會跑出錯誤呢...
Hsieh版主的巨集,大大降低工作量,真的太感謝你了

TOP

回復 12# p6703
  1. Sub Ex()
  2. Dim A As Range, x%, y%
  3. Set d = CreateObject("Scripting.Dictionary")
  4. With Sheets("Sheet2")
  5. s = Application.Min(.Rows(1))
  6. With Sheets("Sheet1")
  7. n = Application.Max(.Columns("E:F")) - s + 4
  8.    For Each A In .Range(.[A2], .[A2].End(xlDown))
  9. ReDim ar(0 To 1, 0 To n)
  10.        m = A & "," & A.Offset(, 1) & "," & A.Offset(, 2)
  11.        If IsEmpty(d(m)) Then
  12.        GoTo 10
  13.        Else
  14.        For i = 0 To 1
  15.          For j = 0 To n
  16.            ar(i, j) = d(m)(i, j)
  17.          Next
  18.        Next
  19.        End If
  20. 10
  21.        x = A.Offset(, 4) - s + 4 '需求日
  22.        y = A.Offset(, 5) - s + 4 '交期
  23.        For i = 0 To 2
  24.          ar(0, i) = A.Offset(, i)
  25.        Next
  26.        ar(0, 3) = "需求日"
  27.        ar(1, 3) = "交期"
  28.        ar(0, x) = ar(0, x) + A.Offset(, 3) '需求
  29.        ar(1, y) = A.Offset(, 3)
  30.        d(m) = ar
  31.        Erase ar
  32.    Next
  33. End With
  34. r = 2
  35. For Each ky In d.keys
  36.   .Cells(r, 1).Resize(2, n + 1) = d(ky)
  37.   r = r + 2
  38. Next
  39. End With
  40. End Sub
複製代碼
學海無涯_不恥下問

TOP

Hsieh 版主因小弟實際排程有時會有跨月的問題,例:需求日5/20,交期回覆到6/10,但按目前巨集執行發現僅比對"日"而已,如按以上日期,其交期對應的會秀到5/10,此是否可再修正???

TOP

感謝Hsieh 版主,小弟將代碼複製要執行時,又在"n = .Cells(1, .Columns.Count).End(xlToLeft).Column - 1”此列跑出"執行階段錯誤 '424': 此處需要物件"的警告視窗,是除了複製外還有需要再做什麼的設定嗎???

TOP

本帖最後由 Hsieh 於 2012-4-28 00:11 編輯

回復 4# p6703
  1. Sub Ex()
  2. Dim A As Range
  3. Set d = CreateObject("Scripting.Dictionary")
  4. With Sheet2
  5. n = .Cells(1, .Columns.Count).End(xlToLeft).Column - 1
  6. s = Day(.[E1])
  7. With Sheet1
  8.    For Each A In .Range(.[A2], .[A2].End(xlDown))
  9. ReDim ar(0 To 1, 0 To n)
  10.        m = A & "," & A.Offset(, 1) & "," & A.Offset(, 2)
  11.        If IsEmpty(d(m)) Then
  12.        GoTo 10
  13.        Else
  14.        For i = 0 To 1
  15.          For j = 0 To n
  16.            ar(i, j) = d(m)(i, j)
  17.          Next
  18.        Next
  19.        End If
  20. 10
  21.        x = Day(A.Offset(, 4)) - s + 4 '需求日
  22.        y = Day(A.Offset(, 5)) - s + 4 '交期
  23.        For i = 0 To 2
  24.          ar(0, i) = A.Offset(, i)
  25.        Next
  26.        ar(0, 3) = "需求日"
  27.        ar(1, 3) = "交期"
  28.        ar(0, x) = ar(0, x) + A.Offset(, 3) '需求
  29.        ar(1, y) = A.Offset(, 3)
  30.        d(m) = ar
  31.        Erase ar
  32.    Next
  33. End With
  34. r = 2
  35. For Each ky In d.keys
  36.   .Cells(r, 1).Resize(2, n + 1) = d(ky)
  37.   r = r + 2
  38. Next
  39. End With
  40. End Sub
複製代碼
學海無涯_不恥下問

TOP

小弟先摸索看看了.再次感謝register313兄^^

TOP

感謝register313兄,可以執行了,但小弟不明白,程式碼一樣,因何小弟自己複製貼上的就不行呢???還有小弟接觸vba不久,不知是否可請register313兄針對程式碼小小說明一下,謝謝...

TOP

        靜思自在 : 君子立恆志,小人恆立志。
返回列表 上一主題