Bắt lỗi nhập trùng STT trong Vba

Thanhhoai0

Yêu THVBA
Mình có đoạn code như sau
Mỗi lần mình thêm dữ liệu từ Form xuống Excel gồm Số thứ tự và tên
Nhưng Code của mình vẫn chưa bắt được lỗi và vẫn nhập được Số thứ tự giống nhau !!!
Các bạn giúp mình xíu để bắt lỗi nhé !!!! Không cho nhập STT trùng nhau, NẾU NHẬP SỐ THỨ TỰ TRÙNG SẼ CÓ THÔNG BÁO "STT NÀY ĐÃ TỒN TẠI"
CẢM ƠN CÁC BẠN !!!
Mã:
Private Sub btn_Nhap_Click()
Dim Hovaten
Dim STT

STT = txt_STT.Value
Hovaten = txt_Hovaten.Value

LastRow = Cells(Rows.Count, "A").End(xlUp).Row

Range("A" & LastRow + 1).Value = STT
Range("B" & LastRow + 1).Value = Hovaten

txt_STT.Value = ""
txt_Hovaten.Value = ""

End Sub
CODE FORM
 

John Carter

Yêu THVBA
Nếu tạo Form ra mà phải nhập số thứ tự thì mình sẽ viết thẳng trên Sheet của Excel sẽ nhanh hơn. Nhập xong kéo 1 phát là có STT ngay.
Có thể file trên là demo, nên mình thử sử dụng Userform theo mong muốn của bạn. Code này mình đã:
- Bỏ phần nhập STT, thay vào đó, STT sẽ được tự động ghi tương ứng khi nhập tên vào bảng
- Bỏ nút thêm dữ liệu, thay vào đó, sử dụng sự kiện KeyDown, chỉ cần nhập tên nhấn Enter là xong.
Mã:
Private Sub txt_Hovaten_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then
        Dim Hovaten     As String
        Dim STT, LastRow As Long
        Dim Sh1     As Worksheet
        Set Sh1 = ThisWorkbook.Sheets("Sheet1")        'Sheet1
        Hovaten = txt_Hovaten.Value        'gán nôi dung textbox cho biên
        LastRow = Sh1.Cells(Rows.Count, "B").End(xlUp).Row        'Dong cuoi cung cua cot B
        Sh1.Range("B" & LastRow + 1).Value = Hovaten        'Dien Hovaten vao cot B
        If Hovaten <> "" Then        'Neu Hovaten co du lieu thi dien STT tuong ung
            Sh1.Range("A" & LastRow + 1).Value = LastRow
        End If
        txt_Hovaten.Value = ""
    End If
End Sub
Tham khảo:
 

Thanhhoai0

Yêu THVBA
cảm ơn bạn mình đã làm được theo code của bạn rồi ạ, bạn cho mình hỏi thêm xíu nữa là
mình có đoạn code sửa dữ liệu từ Form xuống excel. Không biết mình bị lỗi gì chỉ sửa được Hai cột đầu tiên là cột STT(A) và Cột Tên (B)
CÒN cột C là Giới Tinh , Cột D là Nơi sinh Mình không sửa được ????
Các bạn xem giúp mình sửa lỗi này 1 xíu nhé hoặc có code nào hay hơn để sửa được Dữ liệu từ Form xuống eXcel giống bài của mình các bạn cho mình tham khảo nhé
cảm ơn các bạn nhiều ạ !!!
Mã:
Private Sub CommandButton1_Click()
On Error Resume Next
    g = 0
    Do
    DoEvents
    g = g + 1
    p = Sheet1.Range("A" & g)
    If p = TextBox1.Text Then
        Sheet1.Range("B" & g) = TextBox2.Text
        Sheet1.Range("C" & g) = TextBox3.Text
        Sheet1.Range("D" & g) = TextBox4.Text
            End If
    Loop Until p = ""
    UserForm1.TextBox1.SetFocus
End Sub

Private Sub ListBox1_Click()
Me.TextBox1.Text = ListBox1.List(ListBox1.ListIndex, 0)
Me.TextBox2.Text = ListBox1.List(ListBox1.ListIndex, 1)
Me.TextBox3.Text = ListBox1.List(ListBox1.ListIndex, 2)
Me.TextBox4.Text = ListBox1.List(ListBox1.ListIndex, 3)
End Sub

Private Sub UserForm_Click()

End Sub


Nếu tạo Form ra mà phải nhập số thứ tự thì mình sẽ viết thẳng trên Sheet của Excel sẽ nhanh hơn. Nhập xong kéo 1 phát là có STT ngay.
Có thể file trên là demo, nên mình thử sử dụng Userform theo mong muốn của bạn. Code này mình đã:
- Bỏ phần nhập STT, thay vào đó, STT sẽ được tự động ghi tương ứng khi nhập tên vào bảng
- Bỏ nút thêm dữ liệu, thay vào đó, sử dụng sự kiện KeyDown, chỉ cần nhập tên nhấn Enter là xong.
Mã:
Private Sub txt_Hovaten_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then
        Dim Hovaten     As String
        Dim STT, LastRow As Long
        Dim Sh1     As Worksheet
        Set Sh1 = ThisWorkbook.Sheets("Sheet1")        'Sheet1
        Hovaten = txt_Hovaten.Value        'gán nôi dung textbox cho biên
        LastRow = Sh1.Cells(Rows.Count, "B").End(xlUp).Row        'Dong cuoi cung cua cot B
        Sh1.Range("B" & LastRow + 1).Value = Hovaten        'Dien Hovaten vao cot B
        If Hovaten <> "" Then        'Neu Hovaten co du lieu thi dien STT tuong ung
            Sh1.Range("A" & LastRow + 1).Value = LastRow
        End If
        txt_Hovaten.Value = ""
    End If
End Sub
Tham khảo:
 

tuhocvba

Administrator
Thành viên BQT
Tạm thời chưa nhắc tới việc phát sinh câu hỏi mới phải lập topic mới, ở đây ngay nội dung các câu hỏi do chủ topic đưa ra đã rất khó hiểu do không có hình minh họa. Mọi người đều bận rộn, do đó muốn đọc nội dung dễ hiểu, chứ không phải đọc căng mắt ra rồi đoán xem bạn muốn gì.

Nếu bạn không biết cách upload ảnh lên diễn đàn, bạn vui lòng tham khảo topic sau: .

Hãy đọc thử topic sau, học hỏi cách diễn giải ở bài #5:
 
Top