namkhanh.dangtran
Thành viên mới
![](/diendan/data/PhoToDanhHieu/gold.gif)
- Tham gia
- 5/3/11
- Bài viết
- 17
- Được thích
- 8
Mình nghĩ bài viết của ban doomfootwear có thể giúp bạn:Em có ví dụ này muốn nhờ các cao thủ xem và hoàn thiện dùm. Em không nghĩ được code phải viết thế nào nữa!
Mình nghĩ bài viết của ban doomfootwear có thể giúp bạn:
http://www.giaiphapexcel.com/forum/...£nh-báo-khi-trùng-số-liệu-của-2-cá»™t
Khi 2 cột A,B có nhập trùng thì sẽ hiện lênh thông báo, đồng thời delele dòng mới nhập trùng. (mình lấy nguyên đoạn code của bạn doomfootwear).
Tác giả thông cảm nhé. Mình xin lỗi tác giã vì đã sửa một tí form của tác giả.
Mong nhận được đóng góp,
Thân
ptm0412! Em mới nên chưa biết nhiều. Anh sửa giúp em theo cách nhấn nút Save 2 lần (theo cách 3 anh gợi ý) để em tham khảo nha.
Cám ơn ptm0412 nhiều!
Lấy 2 dòng lệnh của nút New, bỏ lên code của nút lệnh Save. Xoá nút New. Xong.
Đừng nói là không biết dùng countif nha.- Cách 2: Dùng hàm đếm giá trị textbox mã trong cột mã, nếu >0 nghĩa là đã có ...
- Ai biểu không kiểm tra trùng làm chi?namkhanh đã viết:nếu mở file đó lên và chỉ để hiện Form đó để nhập liệu thui thi lấy cách đó sẽ không ổn
Tôi làm bài này theo nguyên tắc sau:Cách này em biết. Nhưng nếu mở file đó lên và chỉ để hiện Form đó để nhập liệu thui thi lấy cách đó sẽ không ổn. Có thể có mã đã nhập mà mình không biết thì sẽ nhập lại nhiều lần.
Vậy nhờ ptm0412 xem thêm cho em nhé!
Dim fRng As Range
Private Sub cbQuit_Click()
Unload Me
End Sub
Private Sub cbSave_Click()
Dim iR As Long
iR = Sheets("Sheet1").Range("A1000").End(3).Offset(1, 0).Row
If Trim(Me.txtMa.Value) = "" Then
Me.txtMa.SetFocus
MsgBox "Ma khong duoc de trong!", vbCritical + vbOKOnly
Else
fRng.Offset(, 0) = Me.txtMa.Value
fRng.Offset(, 1) = Me.txtTen.Text
End If
Me.txtMa.SetFocus
End Sub
Private Sub txtMa_Change()
With Sheet1.Range("A1").CurrentRegion.Resize(, 1)
Set fRng = .Find(txtMa.Text, , , xlWhole)
If fRng Is Nothing Then Set fRng = .Parent.Cells(60000, .Column).End(xlUp).Offset(1)
txtTen.Text = fRng.Offset(, 1).Value
End With
End Sub
Tôi làm bài này theo nguyên tắc sau:
- UserForm được thiết kế gồm có: TextBox Mã, TextBox Tên, Nút Save và Nút Thoát (không có nút New)
- Khi bạn nhập mã vào TextBox Mã, nếu mã ấy tồn tại thì tên tự động hiện ra tại TextBox Tên... khi ấy, nếu bạn sửa tên và bấm nút Save thì đồng nghĩa là bạn sửa thông tin của mã vừa nhập
- Khi bạn nhập mã vào TextBox Mã, nếu mã ấy không tồn tại thì TextBox Tên sẽ rổng... khi ấy, nếu bạn nhập tên và bấm nút Save thì đồng nghĩa là bạn thêm thông tin của mã vừa nhập
- Như vậy thì chẳng bao giờ có chuyện nhập trùng cả
Code như sau: ...
If Application.CountIf(Range("A2:A" & iR - 1), txtMa) = 0 Then
With Sheets("Sheet1")
.Cells(iR, 1).Value = Me.txtMa.Value
.Cells(iR, 2).Value = Me.txtTen.Text
End With
Else
MsgBox "Ma nay co roi ku!"
End If
Public EditMode As String
'-----------'
Sub Button1_Click() 'Sửa mã cũ'
EditMode = "Edit"
FORM.Show
End Sub
'------------------'
Sub Button2_Click() 'Thêm mã mới'
EditMode = "Add"
FORM.Show
End Sub
'mở form'
Private Sub UserForm_Initialize()
Dim rng As Range, EndR As Long
If EditMode = "Edit" Then
EndR = [a1000].End(xlUp).Row
Set rng = Range("A2:B" & EndR)
Me.Cb1.Visible = True
Me.txtMa.Visible = False
Me.Cb1.RowSource = rng.Address
Else
Me.Cb1.Visible = False
Me.txtMa.Visible = True
End If
End Sub
'-----------------
Code nhấn nút save'
Private Sub cbSave_Click()
Dim iR As Long
iR = Sheets("Sheet1").Range("A1000").End(xlUp).Row
If EditMode = "Add" Then
If Trim(Me.txtMa.Value) = "" Then
Me.txtMa.SetFocus
MsgBox "Ma khong duoc de trong!", vbCritical + vbOKOnly
Exit Sub
Else
If Application.CountIf(Range("A2:A" & iR), txtMa) = 0 Then
With Sheets("Sheet1")
.Cells(iR + 1, 1).Value = Me.txtMa.Value
.Cells(iR + 1, 2).Value = Me.txtTen.Text
End With
Else
MsgBox "Ma nay co roi ku!" & Chr(10) & "Lam lai!"
Me.txtMa.Value = ""
Me.txtMa.SetFocus
Exit Sub
End If
End If
Else
With Sheet1.Range("A1:A" & iR)
Set fRng = .Find(Cb1.Text, , , xlWhole)
fRng.Offset(, 1) = txtTen
End With
End If
If MsgBox("Them nua hong nhoc?", vbYesNo) = vbYes Then
Me.txtMa.Value = ""
Me.txtTen.Text = ""
If EditMode = "Edit" Then
Me.Cb1.SetFocus
Else
Me.txtMa.SetFocus
End If
Else
Unload Me
End If
End Sub
Hay là vầy đi: Bạn cứ thử tự mình tạo ra Form theo cách mà bạn cho là tối ưu nhất, đưa lên đây rồi mọi người sẽ góp ý sauEm đang bối rối không biết nên thiết Form nhập liệu như thế nào? Em đưa lên đây nhờ các AC xem và tư vấn thêm có em cách tạo Form đó cho hợp lý với các thông tin đã cho trong Excel.
Hay là vầy đi: Bạn cứ thử tự mình tạo ra Form theo cách mà bạn cho là tối ưu nhất, đưa lên đây rồi mọi người sẽ góp ý sau
Dear NGọcEm mới chỉ nghĩ là làm được thế này thui ah. Anh không biết có thể làm bằng cách khác không? Anh xem dùm cho em với nhé!
Dear NGọc
Tôi không được học VBA gì cả .mình nghĩ nếu đơn giản thì chúng ta nên chọn cách đơn giản,nếu dữ liệu phức tạp và đồ sộ thì hãy nên dùng form, nhưng với dữ liệu chỉ đơn giản như vậy thì dùng form làm gì cho thêm phức tạp vậy Ngọc
Private Sub CommandButton1_Click()
Dim iJ As Long, Rng As Range, sRng As Range
With Sheet1
Set Rng = Range([A1], [A65500].End(xlUp))
iJ = Rng.Rows.Count + 1
If Me.MaNV.Value = "" Then Exit Sub
Set sRng = Rng.Find(UCase$(Me.MaNV.Value), , xlFormulas, xlWhole)
If sRng Is Nothing Then
.Cells(iJ, 1).Value = UCase$(Me.MaNV.Value)
.Cells(iJ, 2).Value = Me.Ten.Text
Else
MsgBox "Ma Nay Da Co"
End If
Me.MaNV.Value = "": Me.Ten.Text = ""
End With
Me.MaNV.SetFocus
End Sub
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2