giúp đỡ "điền dữ liệu từ userform vào bảng tính có sử dụng FIND" (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

alexanderhuti

Thành viên chính thức
Tham gia
25/8/09
Bài viết
62
Được thích
6
Chào các bậc cao nhân,

Em có 1 bài toán như thế này ạ:
Trong userform1, khi em chọn LYDO, và nhập MA HANG / GHI CHU (nếu có) và nhấn OK
thì VBA sẽ tìm kiếm tại cột B theo dữ liệu MA HANG đã nhập trong userform1, nếu tìm thấy thì sẽ điền vào cột I và cột J tương ứng dữ liệu trong userform1.
Cái này em đã có code rồi.

Private Sub buttonOK_click()
Dim Cll As Range, fAddress As String
Set Cll = Sheet1.[B:B].Find(txtMAHANG, , xlValues, xlWhole)
fAddress = Cll.Address
Do
Cll.Offset(, 7) = txtLYDO
Cll.Offset(, 8) = txtGHICHU
Set Cll = Sheet1.[B:B].FindNext(Cll)
Loop Until Cll.Address = fAddress
txtMAHANG = "": txtGHICHU = ""
txtMAHANG.SetFocus

End Sub


Giờ em xin hỏi nếu em tạo ra thêm vài MAHANG nữa trong userform1 để có thể tìm và điền cùng một lúc nhiều mã hàng thì code trên phải sửa lại như thế nào ạ. (xin xem userform2).
 

File đính kèm

Chào các bậc cao nhân,

Em có 1 bài toán như thế này ạ:
Trong userform1, khi em chọn LYDO, và nhập MA HANG / GHI CHU (nếu có) và nhấn OK
thì VBA sẽ tìm kiếm tại cột B theo dữ liệu MA HANG đã nhập trong userform1, nếu tìm thấy thì sẽ điền vào cột I và cột J tương ứng dữ liệu trong userform1.
Cái này em đã có code rồi.
...
Giờ em xin hỏi nếu em tạo ra thêm vài MAHANG nữa trong userform1 để có thể tìm và điền cùng một lúc nhiều mã hàng thì code trên phải sửa lại như thế nào ạ. (xin xem userform2).

bạn dùng 1 vòng lặp For Next + kết hợp với Me.Controls("txtMAHANG" & i) <--- phải đặt tên các textbox có dạng txtMAHANG & number để hỗ trợ vòng lặp đó là được

Mã:
Private Sub buttonOK_click()
Dim rng As Range, sRng As Range, i As Long
Set rng = Sheet1.[B:B]
    For i = 1 To 3
    Set sRng = rng.Find(Me.Controls("txtMAHANG" & i), , xlValues, xlWhole)
        If Not sRng Is Nothing Then
        With sRng
            .Offset(, 7) = txtLYDO
            .Offset(, 8) = txtGHICHU
        End With
        End If
    Next
End Sub

Link: https://www.mediafire.com/?a9s6hk6e4qwnas5
 
Lần chỉnh sửa cuối:
Upvote 0
Bác ơi cho mình hỏi thêm:
Trong userform1, mình phải dùng code gì để khi mình nhập mã hàng 1 (có 4 ký tự, vd: 2001) vào textbox1 thì con trỏ sẽ tự động đến textbox tiếp theo để mình nhập tiếp, và cứ thế. (thay vì thông thường thì sau khi nhập ở textbox1 xong thì dùng chuột (Hoặc phím tab) để di chuyển đến textbox tiếp).
Cảm ơn.
 
Upvote 0
Bác ơi cho mình hỏi thêm:
Trong userform1, mình phải dùng code gì để khi mình nhập mã hàng 1 (có 4 ký tự, vd: 2001) vào textbox1 thì con trỏ sẽ tự động đến textbox tiếp theo để mình nhập tiếp, và cứ thế. (thay vì thông thường thì sau khi nhập ở textbox1 xong thì dùng chuột (Hoặc phím tab) để di chuyển đến textbox tiếp).
Cảm ơn.

bạn vào chỉnh Properties của các textbox như sau:

txtMAHANG1:
TabIndex=1

txtMAHANG2:
TabIndex=2
TabStop=True

tmxMAHANG3:
TabIndex=3
TabStop=True

...
bạn muốn chỉnh tuần tự vị trí các control như thế nào thì để ý đến 2 phần TabIndex TabStop đó.

-----
Chúc 1 ngày tốt lành ! :-=
 
Upvote 0
Hi bạn,
Vấn đề mình cần là sau khi mình nhập mã vào txtMAHANG1 (mặc định là 4 ký tự) thì con trỏ sẽ tự động nhảy xuống txtMAHANG2 để mình nhập tiếp (để khỏi phải dùng phim tab hay chuột di chuyển đến) thì làm sao bạn.
 
Upvote 0
Hi bạn,
Vấn đề mình cần là sau khi mình nhập mã vào txtMAHANG1 (mặc định là 4 ký tự) thì con trỏ sẽ tự động nhảy xuống txtMAHANG2 để mình nhập tiếp (để khỏi phải dùng phim tab hay chuột di chuyển đến) thì làm sao bạn.

bạn dùng hàm len đưa vào sự kiện change của textbox đó là được.

Mã:
Private Sub txtMAHANG1_Change()
    If Len(Trim(txtMAHANG1)) = 4 Then
        txtMAHANG2.SetFocus
    End If
End Sub

'- - -
---> vấn đề là bạn phải nhập chính xác mã nếu ko thì nó tự động nhảy sang mà chưa kịp chỉnh mã.
 
Upvote 0
Cảm ơn bạn. Vậy là nếu userform mình có 10 textbox MA HANG thì phải dùng hàm len cho từng textbox MA HANG hết rồi!
 
Upvote 0
Hi bạn,
Vấn đề mình cần là sau khi mình nhập mã vào txtMAHANG1 (mặc định là 4 ký tự) thì con trỏ sẽ tự động nhảy xuống txtMAHANG2 để mình nhập tiếp (để khỏi phải dùng phim tab hay chuột di chuyển đến) thì làm sao bạn.

Nếu bạn không muốn dùng ENTER, Tab hay chuột để chuyển sang textbox khác thì: thiết lập cho mỗi textbox MaxLength = 4 và AutoTab = TRUE
 
Upvote 0
Cảm ơn bạn. Đây đúng điều mình cần, vì file thực tế của mình có đến hơn 10 textbox, nên thiết lập như vậy sẽ nhanh hơn.

Cũng xin cảm ơn bác "phucbugis" đã giúp đỡ.
 
Upvote 0
bạn dùng 1 vòng lặp For Next + kết hợp với Me.Controls("txtMAHANG" & i) <--- phải đặt tên các textbox có dạng txtMAHANG & number để hỗ trợ vòng lặp đó là được

Mã:
Private Sub buttonOK_click()
Dim rng As Range, sRng As Range, i As Long
Set rng = Sheet1.[B:B]
    For i = 1 To 3
    Set sRng = rng.Find(Me.Controls("txtMAHANG" & i), , xlValues, xlWhole)
        If Not sRng Is Nothing Then
        With sRng
            .Offset(, 7) = txtLYDO
            .Offset(, 8) = txtGHICHU
        End With
        End If
    Next
End Sub

Bác phucbugis ơi, vui lòng xem lại giúp mình code này với:
Nếu mình nhập cả 3 MA HANG và chọn lý do và ấn OK thì điền vào bảng tính cột LY DO sẽ đúng với 3 MA HANG này.
Nhưng nếu chỉ nhập 1 hoặc 2 lý do thì khi điền vào bảng tính không đúng. (bác xem file đính kèm giúp nha!)
 
Upvote 0
Bác phucbugis ơi, vui lòng xem lại giúp mình code này với:
Nếu mình nhập cả 3 MA HANG và chọn lý do và ấn OK thì điền vào bảng tính cột LY DO sẽ đúng với 3 MA HANG này.
Nhưng nếu chỉ nhập 1 hoặc 2 lý do thì khi điền vào bảng tính không đúng. (bác xem file đính kèm giúp nha!)

hehe, do mình cái thiếu 1 điều kiện nữa.
bạn thêm dòng đỏ đỏ đó hoặc thay toàn bộ code cho butttonOK_click vào là được.

Mã:
Private Sub buttonOK_click()
Dim rng As Range, sRng As Range, i As Long
Set rng = Sheet1.[B:B]
    For i = 1 To 3
[B][COLOR=#ff0000]        If Me.Controls("txtMAHANG" & i) <> "" Then[/COLOR][/B]
        Set sRng = rng.Find(Me.Controls("txtMAHANG" & i), , xlValues, xlWhole)
            If Not sRng Is Nothing Then
            With sRng
                .Offset(, 7) = txtLYDO
                .Offset(, 8) = txtGHICHU
            End With
            End If
        End If
    Next
    
End Sub
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom