Board logo

標題: [發問] Userform將資料分類後key入工作簿裡各位置 [打印本頁]

作者: lifedidi    時間: 2013-6-20 11:53     標題: Userform將資料分類後key入工作簿裡各位置

本帖最後由 lifedidi 於 2013-6-20 11:54 編輯

大大好:

小弟需要弄一個userform,按下keyin鍵後,將userform裡的資料分類後key入工作簿各位置

工作簿(耗材清單)裡每一個耗材為12列組成,

附件裡有比較詳細的敘述,請參考。

[attach]15272[/attach]

謝謝。
作者: lifedidi    時間: 2013-6-21 11:08

本帖最後由 lifedidi 於 2013-6-21 11:10 編輯

回復 1# lifedidi


大大好!
小弟自己弄了一些程式碼,但是卡在無法設定找出當列最後一個值然後貼上,
請指教,

[attach]15278[/attach]

這樣的寫法不知道可不可行,如果OK

在名為"新增資料"的userform裡

紅色為我設定在第五列將資料copy上,實際上應要為當列資料最後一筆offset1欄後copy上。

尋找條件為"爐號"以及"型號(規格)",這兩筆資料為耗材裡獨一無二的資料,所以做為尋找依據,

Private Sub CommandButton1_Click()
'
略過
'
Set 爐號 = Cells.Find(What:=爐號1, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True)
        With Sheet1
            If Not (爐號 Is Nothing) Then
            If 爐號.Offset(-2, 0) = 規格1 Then
            i = 5
            爐號.Offset(-9, i) = 新增資料.專案編號
            爐號.Offset(-8, i) = 新增資料.製造傳票編號
            爐號.Offset(-7, i) = 新增資料.領料重1
            爐號.Offset(-6, i) = 新增資料.領料時間1
            爐號.Offset(-5, i) = 新增資料.TextBox1
            爐號.Offset(-4, i) = 新增資料.退料重1
            爐號.Offset(-3, i) = 新增資料.退料時間1
            爐號.Offset(-2, i) = 新增資料.TextBox1
            爐號.Offset(-1, i) = 新增資料.真實姓名
            爐號.Offset(0, i) = 新增資料.真實編號
            Else
            MsgBox "僅爐號相同"
            Exit Sub
            End If
            Else
            MsgBox "無對應資料"
            Exit Sub
            End If
        End With
'
略過
'
End Sub
作者: luhpro    時間: 2013-6-22 04:47

回復 2# lifedidi

i = 爐號.Offset(-9, Columns.Count - 2).End(xlToLeft).Column - 爐號.Column + 1

另部分程式內容似乎有錯置 :
            爐號.Offset(-6, i) = 新增資料.TextBox1
            爐號.Offset(-5, i) = 新增資料.領料時間1

            爐號.Offset(-3, i) = 新增資料.TextBox1
            爐號.Offset(-2, i) = 新增資料.退料時間1
作者: lifedidi    時間: 2013-6-24 10:20

回復 3# luhpro

luhpro大大,謝謝你,已修正!

請教一下,我要一併算出庫存量,小弟不才這樣寫是錯的,請高手指導謝謝,

爐號.Offset(2, i) = Val(爐號.Offset(2, Columns.Count - 2).End(xlToLeft).Column - 爐號.Column) - (Val(新增資料.領料重1) - Val(新增資料.退料重1))

↑庫存量      =      ↑當列最後一個數值(最後一筆資料庫存量)     -         ↑新一筆資料的使用淨重
作者: luhpro    時間: 2013-6-26 23:38

本帖最後由 luhpro 於 2013-6-26 23:41 編輯

回復 4# lifedidi

看不懂你的問題,

是哪裡錯了呢?

結果與你的預期不同?

還是會出現錯誤訊息?

是否可以敘述的更清楚一些.

另, 建議你的 UserForm 放在 Sheet.Activate 再呼叫 Show
而在 DeActivate 裡將他Hide較好.
作者: lifedidi    時間: 2013-6-27 10:36

本帖最後由 lifedidi 於 2013-6-27 10:38 編輯

回復 5# luhpro

luhpro大大好:

我這樣的設定很像有點亂,我會依照大大建議修改。

回到問題:

大大的程式碼沒問題!是小弟在下一步時出現問題,想請教!

《實際表格》   │             《對應程式碼》         
                        i = 爐號.Offset(-9, Columns.Count - 2).End(xlToLeft).Column - 爐號.Column + 1       
專案編號               │     爐號.Offset(-9, i) = 新增資料.專案編號       
製造傳票編號   │     爐號.Offset(-8, i) = 新增資料.製造傳票編號       
領出數量               │     爐號.Offset(-7, i) = 新增資料.領料重1       
領出日期               │     爐號.Offset(-6, i) = 新增資料.領料時間1       
領出時間               │     爐號.Offset(-5, i) = 新增資料.TextBox1       
退回數量               │     爐號.Offset(-4, i) = 新增資料.退料重1       
退回日期               │     爐號.Offset(-3, i) = 新增資料.退料時間1       
退回時間               │     爐號.Offset(-2, i) = 新增資料.TextBox1       
員工姓名               │     爐號.Offset(-1, i) = 新增資料.真實姓名       
員工編號               │     爐號.Offset(0, i) = 新增資料.真實編號       
淨用重量               │     爐號.Offset(1, i) = 新增資料.領料重1 - 新增資料.退料重1       
庫存數量               │     爐號.Offset(2, i) = Val(爐號.Offset(2, Columns.Count - 2).End(xlToLeft).Column - 爐號.Column) - (Val(新增資料.領料重1) - Val(新增資料.退料重1))       

以上在《庫存數量》有點問題,小弟的想法是庫存數量為【前一筆資料的庫存數量 - 這次的淨用數量

算出來的值和實際的值不同

而前一筆的庫存數量位置怎麼抓呢?

這樣寫的值是抓到哪一格去了...
Val(爐號.Offset(2, Columns.Count - 2).End(xlToLeft).Column - 爐號.Column)
作者: luhpro    時間: 2013-6-27 22:53

回復 6# lifedidi
我覺得問題的關鍵應該是在於 :
"目前數量" 欄位剛開始是沒有資料的,
所以要抓末欄的欄號,
還是建議延用上面的方式抓末欄,
然後再將該指標位移到想要的位置去 :

爐號.Offset(2, i) = Val(爐號.Offset(2, 爐號.Offset(-9, Columns.Count - 2).End(xlToLeft).Column - 爐號.Column + 1)) - (Val(新增資料.領料重1) - Val(新增資料.退料重1))

試試看是否可以.
作者: lifedidi    時間: 2013-6-28 09:27

回復 7# luhpro

uhpro您好:

如果將資料改為

[attach]15330[/attach]

如紅色字體部分,這樣首筆資料進去抓的到600嗎?

謝謝!
作者: luhpro    時間: 2013-6-30 21:51

回復  luhpro
uhpro您好:
如果將資料改為
如紅色字體部分,這樣首筆資料進去抓的到600嗎?
...
lifedidi 發表於 2013-6-28 09:27

首筆是嗎?
那 Column 不要加 1 就是前一筆資料囉 :

爐號.Offset(2, 爐號.Offset(-9, Columns.Count - 2).End(xlToLeft).Column - 爐號.Column)
作者: lifedidi    時間: 2013-7-2 11:43

回復 9# luhpro

大大,不好意思,小弟太笨了,自己改了幾次還是失敗!

我把檔案簡單化並上傳,請您幫忙,謝謝!

[attach]15347[/attach]
作者: lifedidi    時間: 2013-7-2 11:52

回復 9# luhpro


luhpro大大!被我亂弄出來了XD!

爐號.Offset(2, i) = Val(爐號.Offset(2, i - 1)) - (Val(新增資料.領料重1) - Val(新增資料.退料重1))

謝謝大大的幫忙!終於可以繼續弄下一步了




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)