Newbie nhờ các cao nhân giúp đỡ về bảng nhập liệu

batman1

Thành viên gắn bó
Tham gia ngày
8 Tháng chín 2014
Bài viết
2,712
Được thích
4,035
Điểm
560
Phiếu này em đã in ra rồi phát cho công nhân trong công ty rồi, giờ thu lại để làm bảng tổng kết. Các bác đừng hỏi e sao lại không dùng form điện tử nhé. Công ty em là công ty may, có rất nhiều các cô các bác lớn tuổi không biết dùng smartphone hay máy tính nên bắt buộc phải in giấy.
Thôi được, không góp ý gì nữa. Làm theo đơn đặt hàng. Đoán mò thôi chứ bạn có cho ví dụ kết quả mong đợi cho dữ liệu nhập giả lập đâu.

Đọc kỹ các ghi chú để hiểu triết lý của code. Code kiểm tra tính hợp lệ của từng dữ liệu nhập.
Mã:
Sub tonghop_khaosat()
'    Luu y:
'    - De don gian code thi STT o cot L phai lien tiep, bat dau tu 1 - du lieu bat dau tu dong 4
'    - So phieu nhap o E1
'    - trong Sheet2 co dung 10 cot voi tieu de va thu tu nhu hien tai. Ket qua bat dau tu dong 4
     - So phieu trong cot L:M co the them bot.
Dim lastRow As Long, k As Long, sophieu As Long, Arr, sp(), sh As Worksheet
    Set sh = ThisWorkbook.Worksheets("Sheet1")
    With sh
        lastRow = .Cells(Rows.Count, "L").End(xlUp).Row
        If lastRow < 4 Then
            Application.Assistant.DoAlert "Error", "Kh" & ChrW(244) & "ng c" & ChrW(243) & " b" & ChrW(7843) & "ng phi" & ChrW(7871) & "u!", _
                        msoAlertButtonOK, msoAlertIconCritical, 0, 0, 0
            Exit Sub
        End If
'        mang So phieu
        sp = .Range("L4:M" & lastRow).Value
'        So phieu nhap
        sophieu = .Range("E1").Value
    End With
'    kiem tra so phieu
    If sophieu < 1 Or sophieu > UBound(sp) Then
        Application.Assistant.DoAlert "Error", "S" & ChrW(7889) & " phi" & ChrW(7871) & "u kh" & ChrW(244) & "ng h" & ChrW(7907) & "p l" & ChrW(7879) & ".", _
                        msoAlertButtonOK, msoAlertIconCritical, 0, 0, 0
        Exit Sub
    End If
'    mang 10 phan tu. 8 phan tu cuoi chua chi so cac CheckBox
    Arr = Array(0, 0, 4, 5, 9, 10, 15, 16, 22, 23)
'    neu CheckBox co chi so Arr(k) duoc chon thi Arr(k) = "x", nguoc lai thi Arr(k) = trong
'    O day ta loi dung mang Arr lam mang ket qua
    For k = 2 To 9
        If sh.Shapes("Check Box " & Arr(k)).ControlFormat.Value = 1 Then
            Arr(k) = "x"
        Else
            Arr(k) = ""
        End If
    Next k
'    kiem tra du lieu nhap
    For k = 1 To 4
        If Arr(2 * k) = Arr(2 * k + 1) Then
'            2 CheckBox cua cung cau hoi deu duoc chon hoac deu khong duoc chon - khong hop le
            Application.Assistant.DoAlert "Error", "C" & ChrW(226) & "u tr" & ChrW(7843) & " l" & ChrW(7901) & "i " & k & _
                                        " kh" & ChrW(244) & "ng h" & ChrW(7907) & "p l" & ChrW(7879), _
                                        msoAlertButtonOK, msoAlertIconCritical, 0, 0, 0
            Exit For
        End If
    Next k
'    neu khong co loi thi k > 4. Nhap ket qua xuong Sheet2
    If k > 4 Then
        With ThisWorkbook.Worksheets("Sheet2")
'            dong nhap ket qua
            lastRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1
            If lastRow <= 4 Then lastRow = 4
'            STT
            Arr(0) = lastRow - 3
'            So phieu
            Arr(1) = sp(sophieu, 2)
'            nhap ket qua
            .Cells(lastRow, "A").Resize(, UBound(Arr) + 1).Value = Arr
        End With
    End If
End Sub
 

File đính kèm

lochx93

Thành viên mới
Tham gia ngày
18 Tháng mười một 2019
Bài viết
6
Được thích
0
Điểm
13
Tuổi
26
Thôi được, không góp ý gì nữa. Làm theo đơn đặt hàng. Đoán mò thôi chứ bạn có cho ví dụ kết quả mong đợi cho dữ liệu nhập giả lập đâu.

Đọc kỹ các ghi chú để hiểu triết lý của code. Code kiểm tra tính hợp lệ của từng dữ liệu nhập.
Mã:
Sub tonghop_khaosat()
'    Luu y:
'    - De don gian code thi STT o cot L phai lien tiep, bat dau tu 1 - du lieu bat dau tu dong 4
'    - So phieu nhap o E1
'    - trong Sheet2 co dung 10 cot voi tieu de va thu tu nhu hien tai. Ket qua bat dau tu dong 4
     - So phieu trong cot L:M co the them bot.
Dim lastRow As Long, k As Long, sophieu As Long, Arr, sp(), sh As Worksheet
    Set sh = ThisWorkbook.Worksheets("Sheet1")
    With sh
        lastRow = .Cells(Rows.Count, "L").End(xlUp).Row
        If lastRow < 4 Then
            Application.Assistant.DoAlert "Error", "Kh" & ChrW(244) & "ng c" & ChrW(243) & " b" & ChrW(7843) & "ng phi" & ChrW(7871) & "u!", _
                        msoAlertButtonOK, msoAlertIconCritical, 0, 0, 0
            Exit Sub
        End If
'        mang So phieu
        sp = .Range("L4:M" & lastRow).Value
'        So phieu nhap
        sophieu = .Range("E1").Value
    End With
'    kiem tra so phieu
    If sophieu < 1 Or sophieu > UBound(sp) Then
        Application.Assistant.DoAlert "Error", "S" & ChrW(7889) & " phi" & ChrW(7871) & "u kh" & ChrW(244) & "ng h" & ChrW(7907) & "p l" & ChrW(7879) & ".", _
                        msoAlertButtonOK, msoAlertIconCritical, 0, 0, 0
        Exit Sub
    End If
'    mang 10 phan tu. 8 phan tu cuoi chua chi so cac CheckBox
    Arr = Array(0, 0, 4, 5, 9, 10, 15, 16, 22, 23)
'    neu CheckBox co chi so Arr(k) duoc chon thi Arr(k) = "x", nguoc lai thi Arr(k) = trong
'    O day ta loi dung mang Arr lam mang ket qua
    For k = 2 To 9
        If sh.Shapes("Check Box " & Arr(k)).ControlFormat.Value = 1 Then
            Arr(k) = "x"
        Else
            Arr(k) = ""
        End If
    Next k
'    kiem tra du lieu nhap
    For k = 1 To 4
        If Arr(2 * k) = Arr(2 * k + 1) Then
'            2 CheckBox cua cung cau hoi deu duoc chon hoac deu khong duoc chon - khong hop le
            Application.Assistant.DoAlert "Error", "C" & ChrW(226) & "u tr" & ChrW(7843) & " l" & ChrW(7901) & "i " & k & _
                                        " kh" & ChrW(244) & "ng h" & ChrW(7907) & "p l" & ChrW(7879), _
                                        msoAlertButtonOK, msoAlertIconCritical, 0, 0, 0
            Exit For
        End If
    Next k
'    neu khong co loi thi k > 4. Nhap ket qua xuong Sheet2
    If k > 4 Then
        With ThisWorkbook.Worksheets("Sheet2")
'            dong nhap ket qua
            lastRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1
            If lastRow <= 4 Then lastRow = 4
'            STT
            Arr(0) = lastRow - 3
'            So phieu
            Arr(1) = sp(sophieu, 2)
'            nhap ket qua
            .Cells(lastRow, "A").Resize(, UBound(Arr) + 1).Value = Arr
        End With
    End If
End Sub
Em cảm ơn bác. Cảm ơn ! Cảm ơn u! Cảm ơn you so much!
Bài đã được tự động gộp:

Thôi được, không góp ý gì nữa. Làm theo đơn đặt hàng. Đoán mò thôi chứ bạn có cho ví dụ kết quả mong đợi cho dữ liệu nhập giả lập đâu.

Đọc kỹ các ghi chú để hiểu triết lý của code. Code kiểm tra tính hợp lệ của từng dữ liệu nhập.
Mã:
Sub tonghop_khaosat()
'    Luu y:
'    - De don gian code thi STT o cot L phai lien tiep, bat dau tu 1 - du lieu bat dau tu dong 4
'    - So phieu nhap o E1
'    - trong Sheet2 co dung 10 cot voi tieu de va thu tu nhu hien tai. Ket qua bat dau tu dong 4
     - So phieu trong cot L:M co the them bot.
Dim lastRow As Long, k As Long, sophieu As Long, Arr, sp(), sh As Worksheet
    Set sh = ThisWorkbook.Worksheets("Sheet1")
    With sh
        lastRow = .Cells(Rows.Count, "L").End(xlUp).Row
        If lastRow < 4 Then
            Application.Assistant.DoAlert "Error", "Kh" & ChrW(244) & "ng c" & ChrW(243) & " b" & ChrW(7843) & "ng phi" & ChrW(7871) & "u!", _
                        msoAlertButtonOK, msoAlertIconCritical, 0, 0, 0
            Exit Sub
        End If
'        mang So phieu
        sp = .Range("L4:M" & lastRow).Value
'        So phieu nhap
        sophieu = .Range("E1").Value
    End With
'    kiem tra so phieu
    If sophieu < 1 Or sophieu > UBound(sp) Then
        Application.Assistant.DoAlert "Error", "S" & ChrW(7889) & " phi" & ChrW(7871) & "u kh" & ChrW(244) & "ng h" & ChrW(7907) & "p l" & ChrW(7879) & ".", _
                        msoAlertButtonOK, msoAlertIconCritical, 0, 0, 0
        Exit Sub
    End If
'    mang 10 phan tu. 8 phan tu cuoi chua chi so cac CheckBox
    Arr = Array(0, 0, 4, 5, 9, 10, 15, 16, 22, 23)
'    neu CheckBox co chi so Arr(k) duoc chon thi Arr(k) = "x", nguoc lai thi Arr(k) = trong
'    O day ta loi dung mang Arr lam mang ket qua
    For k = 2 To 9
        If sh.Shapes("Check Box " & Arr(k)).ControlFormat.Value = 1 Then
            Arr(k) = "x"
        Else
            Arr(k) = ""
        End If
    Next k
'    kiem tra du lieu nhap
    For k = 1 To 4
        If Arr(2 * k) = Arr(2 * k + 1) Then
'            2 CheckBox cua cung cau hoi deu duoc chon hoac deu khong duoc chon - khong hop le
            Application.Assistant.DoAlert "Error", "C" & ChrW(226) & "u tr" & ChrW(7843) & " l" & ChrW(7901) & "i " & k & _
                                        " kh" & ChrW(244) & "ng h" & ChrW(7907) & "p l" & ChrW(7879), _
                                        msoAlertButtonOK, msoAlertIconCritical, 0, 0, 0
            Exit For
        End If
    Next k
'    neu khong co loi thi k > 4. Nhap ket qua xuong Sheet2
    If k > 4 Then
        With ThisWorkbook.Worksheets("Sheet2")
'            dong nhap ket qua
            lastRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1
            If lastRow <= 4 Then lastRow = 4
'            STT
            Arr(0) = lastRow - 3
'            So phieu
            Arr(1) = sp(sophieu, 2)
'            nhap ket qua
            .Cells(lastRow, "A").Resize(, UBound(Arr) + 1).Value = Arr
        End With
    End If
End Sub
Bác cho e hỏi chút là em muốn ấn "Nhập liệu" xong thì dữ liệu nhập trước biến mất để nhập phiếu mới thì làm thế nào ạ.
 

batman1

Thành viên gắn bó
Tham gia ngày
8 Tháng chín 2014
Bài viết
2,712
Được thích
4,035
Điểm
560
Em cảm ơn bác. Cảm ơn ! Cảm ơn u! Cảm ơn you so much!
Bác cho e hỏi chút là em muốn ấn "Nhập liệu" xong thì dữ liệu nhập trước biến mất để nhập phiếu mới thì làm thế nào ạ.
Ở cuối cùng có cụm code
Mã:
If k > 4 Then
    With ThisWorkbook.Worksheets("Sheet2")
...
    End With
End If
Sau dòng End With thì thêm cụm
Mã:
    Arr = Array(0, 0, 4, 5, 9, 10, 15, 16, 22, 23)
    For k = 2 To 9
        sh.Shapes("Check Box " & Arr(k)).ControlFormat.Value = -4146
    Next k
    sh.Range("E1").Value = Empty
    sh.Range("E1").Select
 
Top Bottom