Không cho nhập trùng dữ liệu trong form vba

tuấnnèk

Thành viên mới
Tham gia ngày
16 Tháng chín 2020
Bài viết
8
Được thích
0
Điểm
13
Tuổi
20
Mọi người có ai biết cách không cho nhập trùng dữ liệu trong form vba không vậy giúp mình với:(
 

leonguyenz

Thành viên mới
Thành viên BQT
Moderator
Tham gia ngày
2 Tháng tám 2010
Bài viết
4,628
Được thích
8,144
Điểm
910
Nơi ở
Bình Dương
Mọi người có ai biết cách không cho nhập trùng dữ liệu trong form vba không vậy giúp mình với:(
Bạn nên thiết lập 1 file giả lập, mô tả nội dung thường dùng để nhập, xác định khi nào thì bắt đầu đối chiếu trùng (so sánh ngay ký tự đầu tiên?).
Phương thức Find là 1 giải pháp khả thi.
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
11,742
Được thích
17,578
Điểm
1,860
Mọi người có ai biết cách không cho nhập trùng dữ liệu trong form vba không vậy . . . .
Không cho nhập trùng trên Form hay trên trang tính vậy bạn, theo mình đoán là trên trang tính?
Vậy dữ liệu nhập sẽ là chuỗi hay số hay kiểu gì khác?
:D
 

tuấnnèk

Thành viên mới
Tham gia ngày
16 Tháng chín 2020
Bài viết
8
Được thích
0
Điểm
13
Tuổi
20
Không cho nhập trùng trên Form hay trên trang tính vậy bạn, theo mình đoán là trên trang tính?
Vậy dữ liệu nhập sẽ là chuỗi hay số hay kiểu gì khác?
:D
thank bn nha mik mới dạo 1 vòng thì viết dc code này

  1. Dim LastCell As Range

  2. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  3. On Error Resume Next
  4. Application.ScreenUpdating = False
  5. Cells(1) = "=COUNTIF(a2:z1000," & LastCell.Address & ")"
  6. If Cells(1) = 0 Then GoTo thoat
  7. If Not LastCell Is Nothing And Cells(1) > 1 And LastCell <> "" Then
  8. MsgBox "Nhap trung"
  9. LastCell.ClearContents
  10. Beep
  11. End If
  12. thoat:
  13. Set LastCell = ActiveCell
  14. End Sub
xài cũng ổn lắm theo ý kiến của bn như này dc hk
 

leonguyenz

Thành viên mới
Thành viên BQT
Moderator
Tham gia ngày
2 Tháng tám 2010
Bài viết
4,628
Được thích
8,144
Điểm
910
Nơi ở
Bình Dương
thank bn nha mik mới dạo 1 vòng thì viết dc code này

  1. Dim LastCell As Range

  2. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  3. On Error Resume Next
  4. Application.ScreenUpdating = False
  5. Cells(1) = "=COUNTIF(a2:z1000," & LastCell.Address & ")"
  6. If Cells(1) = 0 Then GoTo thoat
  7. If Not LastCell Is Nothing And Cells(1) > 1 And LastCell <> "" Then
  8. MsgBox "Nhap trung"
  9. LastCell.ClearContents
  10. Beep
  11. End If
  12. thoat:
  13. Set LastCell = ActiveCell
  14. End Sub
xài cũng ổn lắm theo ý kiến của bn như này dc hk
Góp ý: Bạn nên gõ Tiếng Việt đầy đủ dấu, nhằm diễn giải rõ ràng cũng như tôn trọng người đọc. Bạn mới tham gia có thể không biết, thành viên mà bạn vừa trả lời đã hơn 70 tuổi, bác ấy cũng như nhiều thành viên khác rất "ngại" những bài viết được viết tắt như vậy.

Bạn hỏi nhập trùng trong Form nhưng viết code sự kiện trên Sheet? Như thế phù hợp không?
 

tuấnnèk

Thành viên mới
Tham gia ngày
16 Tháng chín 2020
Bài viết
8
Được thích
0
Điểm
13
Tuổi
20
Góp ý: Bạn nên gõ Tiếng Việt đầy đủ dấu, nhằm diễn giải rõ ràng cũng như tôn trọng người đọc. Bạn mới tham gia có thể không biết, thành viên mà bạn vừa trả lời đã hơn 70 tuổi, bác ấy cũng như nhiều thành viên khác rất "ngại" những bài viết được viết tắt như vậy.
Bạn hỏi nhập trùng trong Form nhưng viết code sự kiện trên Sheet? Như thế phù hợp không?
xin lỗi vì chưa nắm rõ những quy tắt ở đây tôi sẽ cố gắng khắc phục.

vậy bạn có thể giúp tôi viết code nhập trùng trên form được không?
xin cảm ơn góp ý của bạn!
 

leonguyenz

Thành viên mới
Thành viên BQT
Moderator
Tham gia ngày
2 Tháng tám 2010
Bài viết
4,628
Được thích
8,144
Điểm
910
Nơi ở
Bình Dương
xin lỗi vì chưa nắm rõ những quy tắt ở đây tôi sẽ cố gắng khắc phục.

vậy bạn có thể giúp tôi viết code nhập trùng trên form được không?
xin cảm ơn góp ý của bạn!
Tham khảo: tạo UserForm có TextBox1, code trong UserForm như sau
Mã:
Private Sub TextBox1_Change()
Dim Rng As Range, xFnd As Range
Set Rng = Sheet1.Range("A:A")
If Len(TextBox1.Value) > 0 Then
    Set xFnd = Rng.Find(TextBox1.Value, , , 1, , , 1)
    If Not xFnd Is Nothing Then
        MsgBox "Nhâp trùng"
        TextBox1.Value = Null
    End If
End If
End Sub
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
11,742
Được thích
17,578
Điểm
1,860
Tham khảo: tạo UserForm có TextBox1, code trong UserForm như sau
Mã:
Private Sub TextBox1_Change()
Dim Rng As Range, xFnd As Range, Lr As Long
Set Rng = Sheet1.Range("A:A")
If Len(TextBox1.Value) > 0 Then
    Set xFnd = Rng.Find(TextBox1.Value, , , 1, , , 1)
    If Not xFnd Is Nothing Then
        MsgBox "Nhâp trùng"
        TextBox1.Value = Null
    End If
End If
End Sub
Cái này sẽ khó đúng, nếu ta cần tìm để phát hiện ngày trùng trong 1 cột ('A')
 

tuấnnèk

Thành viên mới
Tham gia ngày
16 Tháng chín 2020
Bài viết
8
Được thích
0
Điểm
13
Tuổi
20
Cái này sẽ khó đúng, nếu ta cần tìm để phát hiện ngày trùng trong 1 cột ('A')
Theo như bạn leonguyenz bảo thì cháu xin phép xưng là cháu với bác vậy

vậy bác có cách nào đúng hơn không vậy?,bác chỉ cháu với.cháu đang cần đấy bác :D
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
11,742
Được thích
17,578
Điểm
1,860
Nếu không phải kiểu dữ liệu Ngày-Tháng-Năm thì làm theo cách của bạn leonguyenz bảo

Còn là dữ liệu ngày-tháng-năm thì đưa giả lập lên, sẽ cùng tìm ra cách thích hợp.
 

ptm0412

Excel Ordinary Member
Thành viên BQT
Super Moderator
Tham gia ngày
4 Tháng mười một 2007
Bài viết
9,801
Được thích
29,439
Điểm
1,910
Tuổi
58
Nơi ở
Gò Vấp
Textbox luôn luôn là text dù cho gõ vào ngày tháng. Nếu textbox1 là ngày tháng có dạng bất kỳ (dd/mm/yy, mm/dd/yy, dd/mm/yyyy), thì phải dùng hàm chuyển đổi từ text sang date. Tốt nhất là dùng hàm DateSerial kết hợp Left, Mid, Right

Tham khảo: tạo UserForm có TextBox1, code trong UserForm như sau
Mã:
Private Sub TextBox1_Change()
...
End Sub
Không nên dùng sự kiện Change vì cứ hẽ gõ 1 ký tự hay xoá 1 ký tự là code chạy. Hãy sử dụng sự kiện Exit hoặc tốt nhất là BeforeUpdate. Lý do BeforeUpdate có tham số Cancel, nếu sai thì gán Cancel = True và bắt sửa
 
Lần chỉnh sửa cuối:
Top Bottom