Cập nhật dữ liệu khi sử dụng UserForm

Liên hệ QC

peternhp29

Thành viên mới
Tham gia
17/5/17
Bài viết
42
Được thích
6
Gửi anh chị em GPE,

Em có một vấn đề là khi sử dụng userform để nhập liệu, khi nhập liệu liên tục thì trong bảng tính lại không hiển thị dòng cuối cùng, dữ liệu bị trôi khi nhập liệu liên tục (phải tắt Userform, sử dụng scrollbar đưa dữ liệu lên trên rồi tiếp tục mở userform để nhập). Nhờ ACE giúp đỡ.
 

File đính kèm

  • NANG_SUAT_2019T8.xlsm
    1.1 MB · Đọc: 8
Trong file của bạn có 2 Form & bạn đang đề cập đến Form nào?
Tốt nhất bạn mô tả lại xem bạn muốn nhập dữ liệu vô những trường nào của trang nào?
 
Upvote 0
Trong file của bạn có 2 Form & bạn đang đề cập đến Form nào?
Tốt nhất bạn mô tả lại xem bạn muốn nhập dữ liệu vô những trường nào của trang nào?

Gửi lại bác file đã hủy bỏ form, mục đích của em là khi sử dụng userform nhập liệu tại sheet input.
Trong quá trình nhập liệu, dữ liệu chạy liên tục xuống dưới.
1569310370131.png
Kết quả, khi nhập liệu dữ liệu tự động nhảy lên trên mà không cần tắt userform1569310353722.png1569310370131.png
1569310353722.png
 

File đính kèm

  • NANG_SUAT_2019T8.xlsm
    1.1 MB · Đọc: 3
Upvote 0
Điều đầu tiên mình sẽ gốp ý với bạn là cách gán tên gợi nhớ đến các Controls
Ta không nên xài các tên vô tri giác của VBE gợi ý, mà nên gán tên trong những trường hợp như sau:
PHP:
CmdBOM thay vì CommandButton1:                       tbNS thay cho TextBox1        
tbNgay thay cho TextBox4:                            tbMSCN thay vì TextBox2
. . . .
Có vậy thì hàng chục năm sau bạn cũng sẽ không tốn thời gian nào nữa để xác định Control này là cái gì hay dùng để làm gì!

Thứ hai: Bạn cần nhập liệu vô 5 cột (gồm các cột A, B, D, G & J), trong đó cột J sẽ nhập từ con số ngẫu nhiên nào đó & khác với 4 trường còn lại;
Nhưng bạn lại xác định dòng cuối để từ đó nhập liệu lại là cột J ngộ nghĩnh này(?) Sao không lấy cột A, hay cột B; Là những cột luôn là dữ liệu thực
Đừng nói với tôi là bạn thích phiêu lưu mạo hie3m chút đó nha!?

Thứ ba: Quá trình tạo & nhập các trị ngẫu vô 5 dòng của cột J này theo mình có thể không dài làm vậy
Những số liệu năng suất tùy hứng này trong ba động trong khoảng bao nhiêu là vừa ý bạn? Biết bạn ta có thể nhập trực tiếp như 4 trường còn lại thôi (& như vậy mình cho là sẽ ngắn gọn hơn)

Rất vui được trao đổi tiếp cùng bạn!
 
Upvote 0
Điều đầu tiên mình sẽ gốp ý với bạn là cách gán tên gợi nhớ đến các Controls
Ta không nên xài các tên vô tri giác của VBE gợi ý, mà nên gán tên trong những trường hợp như sau:
PHP:
CmdBOM thay vì CommandButton1:                       tbNS thay cho TextBox1      
tbNgay thay cho TextBox4:                            tbMSCN thay vì TextBox2
. . . .
Có vậy thì hàng chục năm sau bạn cũng sẽ không tốn thời gian nào nữa để xác định Control này là cái gì hay dùng để làm gì!

Thứ hai: Bạn cần nhập liệu vô 5 cột (gồm các cột A, B, D, G & J), trong đó cột J sẽ nhập từ con số ngẫu nhiên nào đó & khác với 4 trường còn lại;
Nhưng bạn lại xác định dòng cuối để từ đó nhập liệu lại là cột J ngộ nghĩnh này(?) Sao không lấy cột A, hay cột B; Là những cột luôn là dữ liệu thực
Đừng nói với tôi là bạn thích phiêu lưu mạo hie3m chút đó nha!?

Thứ ba: Quá trình tạo & nhập các trị ngẫu vô 5 dòng của cột J này theo mình có thể không dài làm vậy
Những số liệu năng suất tùy hứng này trong ba động trong khoảng bao nhiêu là vừa ý bạn? Biết bạn ta có thể nhập trực tiếp như 4 trường còn lại thôi (& như vậy mình cho là sẽ ngắn gọn hơn)

Rất vui được trao đổi tiếp cùng bạn!
Cảm ơn bác đã góp ý,

Ý 1: em đã chỉnh sửa lại
Ý 2: những code này em copy trên mạng, chỉ chỉnh sửa nhỏ. Sở dĩ em lấy cột J làm dòng cuối là cột này được tùy chọn ngẫu nhiên (tổng 5 số) và copy từ cột V vào. Cái này em làm là do lười nhập liệu nên khoán năng suất chỉ cần năng suất tổng chạy từ 100 - 120(đôi lúc nó ra số âm mà trình có hạn nên không biết làm sao luôn). Sheet DTB là sheet xuất dữ liệu năng suất cuối cùng.
Ý 3: em thì đang học VBA nên chưa viết được những code trên, chủ yếu copy paste và chỉnh sửa những cái mình hiểu.

Chúc sức khỏe bác.
 

File đính kèm

  • NANG_SUAT_2019T8.xlsm
    1.1 MB · Đọc: 18
Upvote 0
Bạn tham khảo & thử với macro sau, sau đó cho ý kiến để còn sửa đổi hay bổ sung:
PHP:
Private Sub CmdBOM_Click()
Dim wS As Worksheet
Dim J As Long, lR As Integer, Zum As Double
   
    Set wS = ActiveSheet:                   Application.ScreenUpdating = False
    'find last row of column                '
   lR = wS.Cells(wS.Rows.Count, "J").End(xlUp).Row
    Randomize
    With Application.WorksheetFunction
        For J = 1 To 5
            Cells(lR + J, "B").Value = txtmscn.Value * 1
            Cells(lR + J, "G").Value = 1
            Cells(lR + J, "D").Value = txtcd.Value
            Cells(lR + J, "A").Value = CDate(txtdate.Value)
           If J Mod 2 = 1 Then
                Zum = 20 + 9 * Rnd() \ 1
                Cells(lR + J, "J").Value = Zum
                If J < 5 Then Cells(lR + J + 1, "J").Value = 40 + J - Zum
           End If
        Next J
    End With
Application.ScreenUpdating = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn tham khảo & thử với macro sau, sau đó cho ý kiến để còn sửa đổi hay bổ sung:
PHP:
Private Sub CmdBOM_Click()
Dim wS As Worksheet
Dim J As Long, lR As Integer, Zum As Double
  
    Set wS = ActiveSheet:                   Application.ScreenUpdating = False
    'find last row of column                '
   lR = wS.Cells(wS.Rows.Count, "J").End(xlUp).Row
    Randomize
    With Application.WorksheetFunction
        For J = 1 To 5
            Cells(lR + J, "B").Value = txtmscn.Value * 1
            Cells(lR + J, "G").Value = 1
            Cells(lR + J, "D").Value = txtcd.Value
            Cells(lR + J, "A").Value = CDate(txtdate.Value)
           If J Mod 2 = 1 Then
                Zum = 20 + 9 * Rnd() \ 1
                Cells(lR + J, "J").Value = Zum
                If J < 5 Then Cells(lR + J + 1, "J").Value = 40 + J - Zum
           End If
        Next J
    End With
Application.ScreenUpdating = True
End Sub
Cảm ơn bác, code này chạy ngon. Để em nghiên cứu lại đoạn code của bác.

Xin chân thành cảm ơn
 
Upvote 0
Web KT
Back
Top Bottom