Trong quá trình nhập liệu lại phát sinh một bẫy lỗi mới nữa.
Tất cả bẫy lỗi của bạn viết vừa rồi là quá tuyệt vời. Nhưng vẫn còn một lỗi rất lớn đó là :
Ví dụ: Số hộ và các mã cũa số hộ đều không trùng với dữ liệu đã nhập, nhưng các mã của số hộ đều cùng một mã ví dụ như số hộ là 001, các mã la 0101001, 0101001, 0101001 Click OK thì vùng nhập liệu bên phải các mã bị trùng.
thì không thấy hiện hộp thoại thông báo. Ta có nên kết hợp 2 phương thức hay không ? PrivateSubCommandButton1_Click() và Sub Worksheet_Change.
Bạn giúp mình giải quyết vấn đề này đi.
Thân chào bạn !
Nếu nhập bằng code thì không sử dụng sự kiện Worksheet_Change nữa. Vấn đề là sửa code
CommandButton1_Click thế nào cho phù hợp thôi.
Bây giờ, thay vì kiểm tra mã số chỉ trong vùng F4:O65000 thì mình tìm thêm trong vùng B4:B13 nữa, như vậy là kiểm soát được vấn đề mã nhập thủ công ở bên trái có sự trùng lặp.
Code bây giờ là thế này:
[GPECODE=vb]Private Sub CommandButton1_Click()
Dim Rng As Range, Cll As Range
With Sheets("DATA")
'Kiem tra So ho
If IsEmpty(.[C4]) Then
MsgBox "Chua nhap So ho!": .[C4].Select: Exit Sub
Else
Set Rng = .[E4:E65000].Find(Format(.[C4], "000"), , xlValues, xlWhole)
If Not Rng Is Nothing Then
MsgBox "So ho nay da ton tai. Hay nhap lai so khac!"
.[C4:C13].ClearContents: .[C4].Select: Exit Sub
End If
End If
'Kiem tra Ma so
If .[B14].End(xlUp).Row = 3 Then
MsgBox "Chua nhap Ma so nao!": .[B4].Select: Exit Sub
Else
For Each Cll In .[B4:B13]
If Not IsEmpty(Cll) Then
Set Rng = .[B4:B13,F4:O65000].Find(Format(Cll, "0000000"), Cll, xlValues, xlWhole) 'Cho nay moi sua lai
If Rng.Address <> Cll.Address Then 'Cho nay moi sua lai
MsgBox "Ma so " & Format(Cll, "0000000") & " bi trung. Hay nhap lai ma so khac!"
Cll.ClearContents: Cll.Select: Exit Sub
End If
End If
Next
End If
'Da kiem tra xong, du lieu hop le --> Nhap gia tri qua vung ben phai
Set Rng = .[E65000].End(xlUp).Offset(1)
Rng = .[C4]: Rng.NumberFormat = "000"
Rng.Offset(, 1).Resize(, 10) = WorksheetFunction.Transpose(.[B4:B13])
Rng.Offset(, 1).Resize(, 10).NumberFormat = "0000000"
End With
End Sub[/GPECODE]