文/江覓
生產排程在生產過程中是一個相對繁雜的工作,用excel來做排程計算,感覺十分困難。其中許多日期和數據計算,關聯性比較多,所以存在許多的條件設定。
這個表格可完成5天之內排程計算功能,本想做更多天自動計算排程,但是由於對這方面沒有深入體會和實際應用,未能實現,同時應用過程中也難免存在一些沒有考慮到的問題。
此表數據完全自動化計算,只需要輸入訂單數量即可,其它數據會自動計算出來,這是我最滿意的方面。
完全自動化也有某些弊端,可操作性雖然簡單了,也固化了一些格式,不能自由修改。下一步對一些不可修改項進行處理,可能會更人性化,擴充更多計劃排程天數。
設置頁相對內容少一些 ,為以後做表單式輸入提供自定義參數。
使用自定義參數可以大大降低使用過程中出現的BUG,也是為了更好的操作體驗,簡化鍵盤錄入操作而製作。雖然在編程過程中增加了很多麻煩,但在程序應用過程中會得到很好的應用便捷。
部分代碼
Private Sub Worksheet_Change(ByVal Target As Range)If VBA.Left(Target.Address, 2) = "$E" ThenDim cr(0 To 4)For i = 0 To 4cr(i) = "$E$" & i + 2Next iDim x As VariantDim r As Integer, topR As IntegerDim C As Integer, endC As IntegerDim iRow As Integer, iCol As IntegerDim iDay As VariantDim Pday As IntegerPday = 5Dim rkeys As Range, iR As RangeFor Each x In crIf x = Target.Address TheniRow = Target.RowiDay = Me.Range("I" & iRow).Value / Me.Range("K" & iRow).ValueIf Me.Range("U" & iRow) > iRow Then MsgBox "訂單太多,沒辦法生產!": Exit SubIf iDay > Pday Then MsgBox "計劃超出天數!": Exit SubIf Me.Range("K" & iRow).Value > Me.Range("j" & iRow).Value Then MsgBox "產能不足!": Exit SubIf Me.Range("I" & iRow).Value <= 0 Then MsgBox "庫存足夠,無需排程!": Exit SubIf Me.Range("K" & iRow).Value > Range("I" & iRow).Value ThenWith Me.Range("P" & iRow & ":T" & iRow).Value = "".Interior.Color = RGB(221, 221, 222)End WithMe.Range("P" & iRow).Value = Me.Range("I" & iRow).ValueWith Me.Range("Q" & iRow & ":T" & iRow).Value = "".Interior.Color = RGB(221, 221, 222)End WithExit SubEnd IfSet rkeys = Worksheets("設置").Range("A2:A6")Set iR = rkeys.Find(Me.Range("N" & iRow).Value)If iR Is Nothing Then MsgBox "No": Exit Subr = iR.RowSelect Case rCase 2topR = 16Case 3topR = 17Case 4topR = 18Case 5topR = 19Case 6topR = 20 End SelectendC = Me.Range("U" & iRow).Value '''天數''''''''''''''''''''''''''''''''''''''''''''''''''''' 清空數據With Me.Range("P" & iRow & ":T" & iRow).Value = "".Interior.Color = RGB(221, 221, 222)End With'''''''''''''''''''''''''''''''''''''''''''''''''''''Dim s As Integer, xValue As Variants = endCFor i = topR To topR + endC - 1Me.Cells(iRow, i).Value = Me.Range("K" & iRow).ValueWith Me.Cells(iRow, i).Interior.Color = 12354545End WithNext i 'End IfNext xMe.Cells(iRow, i - 1).Value = Me.Range("I" & iRow).Value - Me.Range("K" & iRow).Value * (s - 1)End IfEnd Sub