依未結PO及要出貨數量,自動換算要出貨的PO及數量
- 帖子
- 835
- 主題
- 6
- 精華
- 0
- 積分
- 915
- 點名
- 0
- 作業系統
- Win 10,7
- 軟體版本
- 2019,2013,2003
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2010-5-3
- 最後登錄
- 2025-7-5
|
本帖最後由 luhpro 於 2012-10-2 21:19 編輯
回復 luhpro
Private Sub Worksheet_Change 是這 "未結PO" 工作表的觸動事件
GBKEE 發表於 2012-10-2 10:16 
嗯...
我這樣寫是依據我之前有過不好的經驗而調整過來的,
此前有遇到使用者反應作業中會亂跳錯誤訊息.
後來經過測試才發現若一 Excel 檔案正在運作 VBA 程式(即並非正在等待使用者的操作),
而使用者又因有其他需求開啟或切換到另一個 Excel 程式(或是使用者想趁程式運作中的等待時間, 切換到另一個 Sheet 檢視資料)時,
像上述那樣不指定要作用的物件的情形,
有機率會發生索引(即所作用的物件並非程式設計時所預期的那個)錯誤的狀況.
我覺得這似乎是因為 Windows 多工而 Excel VBA 又可以作用在不同的檔案或 Sheet 間所導致的問題,
所以後來我都會用 With 指定作用物件於其內再以 . 來索引,
以避免類似困擾的發生.
這是我的理解,也許不一定對,
但是那時這樣做過後該問題就不再發生了.
PS: 當時的環境是 Windows XP + Office 2000 Professional |
|
|
|
|
|
|
|
- 帖子
- 134
- 主題
- 27
- 精華
- 0
- 積分
- 168
- 點名
- 0
- 作業系統
- WINXP
- 軟體版本
- EXCEL 2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- 雲林
- 註冊時間
- 2010-10-6
- 最後登錄
- 2018-5-13

|
12#
發表於 2012-10-3 10:27
| 只看該作者
luhpro兄,小弟實際測試,除了感謝費時的修改,發現新輸入"未結PO"的資料無法再於"出貨數量"中秀出
例:小弟新增了35453 500,000,然後於出貨數中將原PO數都核消完後,就無法再產生新PO出貨明細了,請問是否小弟輸入方式有誤,再煩請協助看看,謝謝
另於 "輸入區" 中無資料區域的輸入方式與一般 Excel 輸入方式相同,
每輸完一筆資料就會直接做出貨配比,==>當下未交數是會自動秀出KEY IN的數量 |
|
|
|
|
|
|
|
- 帖子
- 835
- 主題
- 6
- 精華
- 0
- 積分
- 915
- 點名
- 0
- 作業系統
- Win 10,7
- 軟體版本
- 2019,2013,2003
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2010-5-3
- 最後登錄
- 2025-7-5
|
13#
發表於 2012-10-3 22:55
| 只看該作者
本帖最後由 luhpro 於 2012-10-3 22:57 編輯
luhpro兄,小弟實際測試,除了感謝費時的修改,發現新輸入"未結PO"的資料無法再於"出貨數量"中秀出
例: 於出貨數中將原PO數都核消完後,就無法再產生新PO出貨明細了
p6703 發表於 2012-10-3 10:27 
這是因為在 Sheets("未結PO") 有異動時 並沒有做適當的處理:
1. 將客戶料號加入 UserForm 裡客戶料號的下拉式選單中,以備後續作業中可以正常選擇到該料號.
2. 將使用者輸入的 "期初未交數" 代入至 "當下未交數" 內,
因為儲存格沒有輸入資料時其值為 0 ,
故而 "當下未交數" 是 0 的新增項目,
自然就無法正常參與出貨序列了.
修改後程式如下:
自動核消表-Ans3.zip (33.34 KB)
每輸完一筆資料就會直接做出貨配比,==>當下未交數是會自動秀出KEY IN的數量
不懂, 是程式的反應有問題嗎? |
|
|
|
|
|
|
|
- 帖子
- 134
- 主題
- 27
- 精華
- 0
- 積分
- 168
- 點名
- 0
- 作業系統
- WINXP
- 軟體版本
- EXCEL 2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- 雲林
- 註冊時間
- 2010-10-6
- 最後登錄
- 2018-5-13

|
14#
發表於 2012-10-4 12:09
| 只看該作者
|
luhpro兄依提供的自動核消表-Ans3中在未結PO第34列直接增加一筆35451 500,000(此原未結已為0),然後再於出貨數量A~C欄位輸入日期及數量,但依舊跳出 "輸入的出貨數未能全部分配完成,出貨數由500000調降為0),請問是小弟操作順序有誤嗎??? |
|
|
|
|
|
|
|
- 帖子
- 835
- 主題
- 6
- 精華
- 0
- 積分
- 915
- 點名
- 0
- 作業系統
- Win 10,7
- 軟體版本
- 2019,2013,2003
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2010-5-3
- 最後登錄
- 2025-7-5
|
15#
發表於 2012-10-6 01:39
| 只看該作者
luhpro兄依提供的自動核消表-Ans3中在未結PO第34列直接增加一筆35451 500,000(此原未結已為0),然後再於出 ...
p6703 發表於 2012-10-4 12:09 
修正一行內容 :
Do Until .Cells(Target.Row, 2) = rStuff And rStuff.Offset(, 3) <> 0 ' 找到該客戶
自動核消表-Ans4.zip (33.55 KB)
|
|
|
|
|
|
|
|
- 帖子
- 129
- 主題
- 3
- 精華
- 0
- 積分
- 178
- 點名
- 0
- 作業系統
- XP
- 軟體版本
- 2010
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2010-12-28
- 最後登錄
- 2018-11-10
|
16#
發表於 2012-10-6 17:07
| 只看該作者
回復 15# luhpro
我是路人~~~~~
我試著重新把已輸入的刪除
測試的結果如下圖.......大家看圖囉
|
|
|
50 字節以內
不支持自定義 Discuz! 代碼
|
|
|
|
|
- 帖子
- 835
- 主題
- 6
- 精華
- 0
- 積分
- 915
- 點名
- 0
- 作業系統
- Win 10,7
- 軟體版本
- 2019,2013,2003
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2010-5-3
- 最後登錄
- 2025-7-5
|
17#
發表於 2012-10-8 22:46
| 只看該作者
本帖最後由 luhpro 於 2012-10-8 22:47 編輯
回復 luhpro
我是路人~~~~~
我試著重新把已輸入的刪除
測試的結果如下圖.......大家看圖 ...
softsadwind 發表於 2012-10-6 17:07 
修改程式如下:- Private Sub Worksheet_Change(ByVal Target As Range)
- Dim lRow As Long
- Dim rStuff As Range, rTemp As Range
- Dim bChecked As Boolean
- Dim vPo, vBalance
-
- With Target.Parent '於 Sheets("出貨數量")
- Set vPo = Sheets("未結PO")
- Set rTemp = .Cells(Target.Row, 3)
-
- If .Cells(Target.Row, 2) <> "" And rTemp <> "" And Target.Column < 4 Then
- lRow = .Cells(Rows.Count, 5).End(xlUp).Row + 1
- vBalance = rTemp
- Set rStuff = vPo.[A2] ' 於 Sheets("未結PO")
-
- 'Do Until .Cells(Target.Row, 2) = rStuff And rStuff.Offset(, 3) <> 0 ' 找到該客戶
- ' Set rStuff = rStuff.Offset(1) ' 移到下一筆資料
- 'Loop
-
- Do ' Loop Until rStuff = ""
- Do Until (.Cells(Target.Row, 2) = rStuff And rStuff.Offset(, 3) <> 0) Or rStuff = "" ' 找到該客戶或已沒資料
- Set rStuff = rStuff.Offset(1) ' 移到下一筆資料
- Loop
-
- Do While rStuff.Offset(, 3) <> 0 ' 還有尚未出貨的資料
- If vBalance > rStuff.Offset(, 3) Then ' 尚未出貨數量大於當下未交數
- Application.EnableEvents = False
- With .Cells(lRow, 5)
- .NumberFormat = "yyyy/m/d"
- .Value = .Parent.Cells(Target.Row, 1) ' 日期
- End With
- .Cells(lRow, 6) = .Cells(Target.Row, 2) ' 客戶料號
- .Cells(lRow, 7) = rStuff.Offset(, 1) ' 客戶PO
- With .Cells(lRow, 8)
- .NumberFormat = "#,##0_ "
- .Value = rStuff.Offset(, 3) ' 出貨數
- End With
- vBalance = vBalance - rStuff.Offset(, 3)
- rStuff.Offset(, 3) = 0
- lRow = lRow + 1
- Application.EnableEvents = True
- Else
- Application.EnableEvents = False
- With .Cells(lRow, 5)
- .NumberFormat = "yyyy/m/d"
- .Value = .Parent.Cells(Target.Row, 1) ' 日期
- End With
- .Cells(lRow, 6) = .Cells(Target.Row, 2) ' 客戶料號
- .Cells(lRow, 7) = rStuff.Offset(, 1) ' 客戶PO
- With .Cells(lRow, 8)
- .NumberFormat = "#,##0_ "
- .Value = vBalance ' 出貨數
- End With
- rStuff.Offset(, 3) = rStuff.Offset(, 3) - vBalance
- Application.EnableEvents = True
- Exit Sub ' 尚未出貨數量等於0則跳出
- End If
- Loop ' While rStuff.Offset(, 3) <> 0
- Loop Until rStuff = "" ' 直到最後一筆資料
- If vBalance > 0 Then ' 輸入的出貨數未能全部分配完成
- Application.EnableEvents = False ' 禁能會被觸發的動
- vTemp = "輸入的出貨數未能全部分配完成, 出貨數由 " & rTemp & "調降至 "
- rTemp = rTemp - vBalance
- MsgBox vTemp & rTemp
- Application.EnableEvents = True ' 致能(恢復)會被觸發的動作
- End If
- End If
- End With
- End Sub
複製代碼
自動核消表-Ans5.zip (34.14 KB)
當初會加那一段也是考慮到若使用者不小心輸入過多的出貨量,
會造成無法還原回未輸入前的狀態,
結果因考慮不週迴圈條件未跟著調整,
反而衍申出其他的錯誤出現,
謝謝你的指正. |
|
|
|
|
|
|
|
- 帖子
- 129
- 主題
- 3
- 精華
- 0
- 積分
- 178
- 點名
- 0
- 作業系統
- XP
- 軟體版本
- 2010
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2010-12-28
- 最後登錄
- 2018-11-10
|
18#
發表於 2012-10-9 00:30
| 只看該作者
回復 17# luhpro
我這幾天很努力的看你寫的程式
但是還是頭暈暈 跟不上.......
感謝你願意更新...讓我有學習的機會 |
|
|
50 字節以內
不支持自定義 Discuz! 代碼
|
|
|
|
|
- 帖子
- 134
- 主題
- 27
- 精華
- 0
- 積分
- 168
- 點名
- 0
- 作業系統
- WINXP
- 軟體版本
- EXCEL 2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- 雲林
- 註冊時間
- 2010-10-6
- 最後登錄
- 2018-5-13

|
19#
發表於 2012-10-12 16:13
| 只看該作者
|
感謝luhpro 兄多次修改,小弟現使用上暫無問題,在此再次誠心感謝,真的幫了小弟的大忙^^ |
|
|
|
|
|
|
|