- 帖子
- 835
- 主題
- 6
- 精華
- 0
- 積分
- 915
- 點名
- 0
- 作業系統
- Win 10,7
- 軟體版本
- 2019,2013,2003
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2010-5-3
- 最後登錄
- 2025-7-5
|
6#
發表於 2012-9-27 19:15
| 只看該作者
超感謝luhpro兄,原來巨集也可以這麼用,輸入符合的資料後自動秀出,真是讓小弟”大開眼界”
只是小弟所學 ...
p6703 發表於 2012-9-22 22:23 
當判斷出貨資料輸入完後,
日期與料號部分是從輸入區直接帶過去,而先以料號為 Key 依序往下找符合的未結PO資料(當下未交數 不是 0 的),
找到後將客戶 PO 帶過去, 再將計算結果分別帶入 當下未交數 與 出貨數, 判斷是否需出貨數都已完成, 若未完成則繼續上述循環.
luhpro兄,小弟實際執行發現有以下問題,再煩請協助解惑,謝謝..
1.新增的筆數資料不會捉到
因PO會陸續 ...
p6703 發表於 2012-9-24 18:12 
這確實是該程式沒有處理的部份,
1. 若填資料時沒有將 期初未交數 也加填到 當下未交數, 那麼 當下未交數 是 0 自然就不會有新出貨資料了.
可於 Sheets("未結PO")加上 :- Private Sub Worksheet_Change(ByVal Target As Range)
- With Target.Parent '於 Sheets("未結PO")
- If .Cells(Target.Row, 1) <> "" And .Cells(Target.Row, 2) <> "" And .Cells(Target.Row, 3) <> "" Then
- With .Cells(Target.Row, 3)
- .NumberFormat = "#,##0_ "
- .Offset(, 1).NumberFormat = "#,##0_ "
- .Offset(, 1) = .Value
- End With
- End If
- End With
- End Sub
複製代碼 2. 這個處理上需要較多的動作,需要再想一下, 晚點再Post.
luhpro兄,小弟開始輸入資料,才第二筆就跑出以下錯誤,確定資料並未打錯,而"未結PO"當下未交數也沒錯,不 ...
p6703 發表於 2012-9-25 11:13 
這可能是你資料列數超過 Integer 可處理範圍, 我將 iRow 改成 lRow 如下:- Private Sub Worksheet_Change(ByVal Target As Range)
- Dim lRow As Long
- Dim rStuff As Range
- Dim bChecked As Boolean
- Dim vPo, vBalance
-
- Set vPo = Sheets("未結PO")
-
- With Target.Parent '於 Sheets("出貨數量")
- If .Cells(Target.Row, 2) <> "" And .Cells(Target.Row, 3) <> "" Then
- lRow = IIf(.Cells(2, 5) = "", 2, .Cells(2, 5).End(xlDown).Row + 1)
- vBalance = .Cells(Target.Row, 3)
- Set rStuff = vPo.[A2] ' 於 Sheets("未結PO")
-
- Do While .Cells(Target.Row, 2) <> rStuff ' 找到該客戶
- Set rStuff = rStuff.Offset(1) ' 移到下一筆資料
- Loop
-
- Do
- Do While rStuff.Offset(, 3) <> 0 ' 還有尚未出貨的資料
- If vBalance > rStuff.Offset(, 3) Then ' 尚未出貨數量大於當下未交數
- Application.EnableEvents = False
- .Cells(lRow, 5) = .Cells(Target.Row, 1) ' 日期
- .Cells(lRow, 6) = .Cells(Target.Row, 2) ' 客戶料號
- .Cells(lRow, 7) = rStuff.Offset(, 1) ' 客戶PO
- .Cells(lRow, 8) = rStuff.Offset(, 3) ' 出貨數
- vBalance = vBalance - rStuff.Offset(, 3)
- rStuff.Offset(, 3) = 0
- lRow = lRow + 1
- Application.EnableEvents = True
- Else
- Application.EnableEvents = False
- .Cells(lRow, 5) = .Cells(Target.Row, 1) ' 日期
- .Cells(lRow, 6) = .Cells(Target.Row, 2) ' 客戶料號
- .Cells(lRow, 7) = rStuff.Offset(, 1) ' 客戶PO
- .Cells(lRow, 8) = vBalance ' 出貨數
- rStuff.Offset(, 3) = rStuff.Offset(, 3) - vBalance
- Application.EnableEvents = True
- Exit Sub ' 尚未出貨數量等於0則跳出
- End If
- Loop
- Set rStuff = rStuff.Offset(1) ' 移到下一筆資料
- Loop Until .Cells(Target.Row, 2) <> rStuff
- End If
- End With
- End Sub
複製代碼 |
|