Nhờ sửa code tìm kiếm trên listbox (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

ngocvaneahleo

Thành viên mới
Tham gia
2/3/16
Bài viết
19
Được thích
3
sau khi nhập dữ liệu vào ô tìm kiếm, hiện ra kết quả dò tìm thì ok, nhưng khi sửa dữ liệu vừa mới tìm kiếm thì bị lỗi.
cụ thể, sau khi sửa thì nó lại insert thêm 1 dòng mới chứ không phải sửa ngay vị trí mình cần sửa
anh chị sửa lại giúp em với
 

File đính kèm

Muốn làm được điều đó thì những người trong lớp phải có cái gì đó khác nhau, Vd mỗi HS phải có một Mã HS riêng, nếu không có thì dựa vào cái gì để cập nhật nếu lỡ có 2 người trùng tên họ và chữ lót thì sao.
 
Upvote 0
Muốn làm được điều đó thì những người trong lớp phải có cái gì đó khác nhau, Vd mỗi HS phải có một Mã HS riêng, nếu không có thì dựa vào cái gì để cập nhật nếu lỡ có 2 người trùng tên họ và chữ lót thì sao.

Dễ mà, nhưng mà mình k làm dc -=.,,
 
Lần chỉnh sửa cuối:
Upvote 0
Muốn làm được điều đó thì những người trong lớp phải có cái gì đó khác nhau, Vd mỗi HS phải có một Mã HS riêng, nếu không có thì dựa vào cái gì để cập nhật nếu lỡ có 2 người trùng tên họ và chữ lót thì sao.

file trên là dữ liệu của 1 lớp đó, do phần sửa dữ liệu bị lỗi sau khi tìm kiếm (nó insert thêm 1 dòng mới chứ không phải sửa ngay vị trí mình cần sửa) nên trong file ghi lung tung để cho mọi người dễ phát hiện ra thôi.
có gì nhờ mọi người giúp đỡ ạ.
 
Upvote 0
file trên là dữ liệu của 1 lớp đó, do phần sửa dữ liệu bị lỗi sau khi tìm kiếm (nó insert thêm 1 dòng mới chứ không phải sửa ngay vị trí mình cần sửa) nên trong file ghi lung tung để cho mọi người dễ phát hiện ra thôi.
có gì nhờ mọi người giúp đỡ ạ.
Chính vì sửa nên cần phải có cái gì để nhận biết học sinh cần sửa so với học sinh khác, nếu lỡ tên học sinh trùng thì biết sửa học sinh nào.
 
Upvote 0
file trên là dữ liệu của 1 lớp đó, do phần sửa dữ liệu bị lỗi sau khi tìm kiếm (nó insert thêm 1 dòng mới chứ không phải sửa ngay vị trí mình cần sửa) nên trong file ghi lung tung để cho mọi người dễ phát hiện ra thôi.
có gì nhờ mọi người giúp đỡ ạ.

- Đầu tiên bất cứ dữ liệu nào cũng vậy cần phải có primary key. Như vậy từ primary key bạn có thể chỉnh sửa foreign key.
- File của bạn mình mặc định tên hoc sinh và stt sẽ ko thể sửa dc.
- Khi bạn muốn thêm mới thì bấm nút xóa nhanh để nhập dữ liệu vào. (nhưng theo mình thấy nếu đã có tên hs này rồi thì ko cho nhập mới nữa hay là trong 1 lớp ko dc có 2 người trùng tên vvv...) Cái này bạn từ tìm hiểu thêm vậy.
- Nhưng trước mắt bạn test thử file mình sửa lại xem sao !
 

File đính kèm

Upvote 0
- Đầu tiên bất cứ dữ liệu nào cũng vậy cần phải có primary key. Như vậy từ primary key bạn có thể chỉnh sửa foreign key.
- File của bạn mình mặc định tên hoc sinh và stt sẽ ko thể sửa dc.
- Khi bạn muốn thêm mới thì bấm nút xóa nhanh để nhập dữ liệu vào. (nhưng theo mình thấy nếu đã có tên hs này rồi thì ko cho nhập mới nữa hay là trong 1 lớp ko dc có 2 người trùng tên vvv...) Cái này bạn từ tìm hiểu thêm vậy.
- Nhưng trước mắt bạn test thử file mình sửa lại xem sao !

phần sửa dữ liệu thì ok rồi, nhưng còn 1 lỗi nhỏ nữa.
ví dụ như khi tìm kiếm từ " Nguyen Van An" thì sẽ hiện ra kết quả, nhưng khi sửa dữ liệu thì vẫn chưa update lên listbox mà mới chỉ update trong file excel thôi. anh xem cách nào update luôn trên listbox sau khi sửa dữ liệu luôn không.
 
Upvote 0
phần sửa dữ liệu thì ok rồi, nhưng còn 1 lỗi nhỏ nữa.
ví dụ như khi tìm kiếm từ " Nguyen Van An" thì sẽ hiện ra kết quả, nhưng khi sửa dữ liệu thì vẫn chưa update lên listbox mà mới chỉ update trong file excel thôi. anh xem cách nào update luôn trên listbox sau khi sửa dữ liệu luôn không.
Thì thêm dòng màu đỏ vào là được.
Mã:
Private Sub CM_SuaDuLieu_Click()
If Trim(Me.TextBox1.Text) = "" Then
 Dim iRow As Long, i As Long, MyCtrls()
   MyCtrls = Array(TB_stt, TB_Hovaten, TB_lOP, Val(TB_Toan), Val(TB_Hoa), Val(TB_Ly), Val(TB_Anh), Val(TB_Van))
  Range("ListBoxTheoDoi").Offset(ListBox1.ListIndex).Resize(1).Value = MyCtrls
   For i = 0 To 7
     MyControls(i).Text = ""
Next
Exit Sub
Else
 Dim dong As Long, Gttim As String, gim As String
    Gttim = Trim(Me.TB_Hovaten.Value)
  dong = Sheet1.Range("B:B").Find(Gttim, LookIn:=xlValues).Row
                Sheet1.Cells(dong, 3).Value = Me.TB_lOP.Value
                Sheet1.Cells(dong, 4).Value = Me.TB_Toan.Value
                Sheet1.Cells(dong, 5).Value = Me.TB_Hoa.Value
                Sheet1.Cells(dong, 6).Value = Me.TB_Ly.Value
                Sheet1.Cells(dong, 7).Value = Me.TB_Anh.Value
                Sheet1.Cells(dong, 8).Value = Me.TB_Van.Value
                End If
[COLOR=#ff0000][B]Call TextBox1_Change[/B][/COLOR]
End Sub
Và cách làm này thì không đổi tên được bạn nhé, bạn sẽ gặp khó khăn với code này nếu gặp dữ liệu khác (sớm hay muộn thôi). Còn nguyên nhân bạn sẽ tự phát hiện nếu gặp dữ liệu đó.
 
Upvote 0
Thì thêm dòng màu đỏ vào là được.
Mã:
Private Sub CM_SuaDuLieu_Click()
If Trim(Me.TextBox1.Text) = "" Then
 Dim iRow As Long, i As Long, MyCtrls()
   MyCtrls = Array(TB_stt, TB_Hovaten, TB_lOP, Val(TB_Toan), Val(TB_Hoa), Val(TB_Ly), Val(TB_Anh), Val(TB_Van))
  Range("ListBoxTheoDoi").Offset(ListBox1.ListIndex).Resize(1).Value = MyCtrls
   For i = 0 To 7
     MyControls(i).Text = ""
Next
Exit Sub
Else
 Dim dong As Long, Gttim As String, gim As String
    Gttim = Trim(Me.TB_Hovaten.Value)
  dong = Sheet1.Range("B:B").Find(Gttim, LookIn:=xlValues).Row
                Sheet1.Cells(dong, 3).Value = Me.TB_lOP.Value
                Sheet1.Cells(dong, 4).Value = Me.TB_Toan.Value
                Sheet1.Cells(dong, 5).Value = Me.TB_Hoa.Value
                Sheet1.Cells(dong, 6).Value = Me.TB_Ly.Value
                Sheet1.Cells(dong, 7).Value = Me.TB_Anh.Value
                Sheet1.Cells(dong, 8).Value = Me.TB_Van.Value
                End If
[COLOR=#ff0000][B]Call TextBox1_Change[/B][/COLOR]
End Sub
Và cách làm này thì không đổi tên được bạn nhé, bạn sẽ gặp khó khăn với code này nếu gặp dữ liệu khác (sớm hay muộn thôi). Còn nguyên nhân bạn sẽ tự phát hiện nếu gặp dữ liệu đó.

đúng như anh nói, nếu như sửa lại Họ Và Tên or STT thì code bị lỗi, mặc dù em đã sửa lại code như sau:

Mã:
Private Sub CM_SuaDuLieu_Click()
If Trim(Me.TextBox1.Text) = "" Then
 Dim iRow As Long, i As Long, MyCtrls()
   MyCtrls = Array(TB_stt, TB_Hovaten, TB_lOP, Val(TB_Toan), Val(TB_Hoa), Val(TB_Ly), Val(TB_Anh), Val(TB_Van))
  Range("ListBoxTheoDoi").Offset(ListBox1.ListIndex).Resize(1).Value = MyCtrls
   For i = 0 To 7
     MyControls(i).Text = ""
Next
Exit Sub
Else
 Dim dong As Long, Gttim As String, gim As String
    Gttim = Trim(Me.TB_Hovaten.Value)
  dong = Sheet1.Range([COLOR=#0000ff]"A:A"[/COLOR]).Find(Gttim, LookIn:=xlValues).Row
[COLOR=#0000ff]                Sheet1.Cells(dong, 1).Value = Me.TB_stt.Value[/COLOR]
[COLOR=#0000ff]                Sheet1.Cells(dong, 2).Value = Me.TB_Hovaten.Value[/COLOR]
                Sheet1.Cells(dong, 3).Value = Me.TB_lOP.Value
                Sheet1.Cells(dong, 4).Value = Me.TB_Toan.Value
                Sheet1.Cells(dong, 5).Value = Me.TB_Hoa.Value
                Sheet1.Cells(dong, 6).Value = Me.TB_Ly.Value
                Sheet1.Cells(dong, 7).Value = Me.TB_Anh.Value
                Sheet1.Cells(dong, 8).Value = Me.TB_Van.Value
                End If
                Call TextBox1_Change
End Sub

thì báo lỗi ở dòng:
Mã:
dong = Sheet1.Range([COLOR=#0000FF]"A:A"[/COLOR]).Find(Gttim, LookIn:=xlValues).Row

là sao vậy, anh sửa giúp em luôn với.
 
Upvote 0
thì báo lỗi ở dòng:
Mã:
dong = Sheet1.Range([COLOR=#0000FF]"A:A"[/COLOR]).Find(Gttim, LookIn:=xlValues).Row
Dòng này công dụng là sao bạn biết không? Tìm Gttim ở cột B, nếu bạn sửa tên rồi thì ở cột này tìm có Gttim nửa hay không?
 
Upvote 0
Dòng này công dụng là sao bạn biết không? Tìm Gttim ở cột B, nếu bạn sửa tên rồi thì ở cột này tìm có Gttim nửa hay không?

vậy anh sừa lại code làm sao để sửa dc các cột luôn được k ạ, với code trên lỡ như đánh sai tên muốn sửa lại thì k dc rồi.
 
Upvote 0
vậy anh sừa lại code làm sao để sửa dc các cột luôn được k ạ, với code trên lỡ như đánh sai tên muốn sửa lại thì k dc rồi.
Đã bảo ở trên rồi, mỗi người sẽ có một mã số (mã số này là không thay đổi được, nó được nhập lúc HS vào trường đến lúc ra trường luôn). Có mã này mới tính tiếp việc sửa như thế nào. Còn nếu bạn muốn sửa đại đi thì tôi giúp theo kiểu đại đi được không?
 
Upvote 0
vậy anh sừa lại code làm sao để sửa dc các cột luôn được k ạ, với code trên lỡ như đánh sai tên muốn sửa lại thì k dc rồi.
Mình đã giải thích cho bạn hiểu trong bất kỳ CSDL hay database nào cũng cần phải có primary key. Ở đây Primary key mình đặt là họ và tên của học sinh. Như vậy khi đã có primary key bạn có dựa vào nó để chỉnh sửa thuộc tính của foreign key.
Từ đó mình có thể logic như sau :
+ bạn có thể đặt 1 cột mã Số Học sinh và mỗi hs chỉ có 1 mã số duy nhất ko dc trùng nhau, Cột này ko thể chỉnh sữa được. (trong file của bạn mình ko thấy cột mã số HS nên mình đặt tên HS là primary key). Nếu như tiếp tục làm tiếp dựa trên 1 cái bất ổn thì vẫn được thôi nhưng sẽ đi 1 vòng tròn.
+ Như vậy theo như file của bạn nếu như lỡ đánh sai tên HS thì chỉ có cách là xóa đi đánh lại (làm thêm 1 nút xóa tên là dc rồi)
 
Upvote 0
Trong UserForm bỏ cái hàm Filter2DArray này đi, sử dụng Advanced Filter vừa đơn giản code lại ngắn gọn và dễ dàng áp dụng cho bất kỳ cột nào.
 
Upvote 0
Đã bảo ở trên rồi, mỗi người sẽ có một mã số (mã số này là không thay đổi được, nó được nhập lúc HS vào trường đến lúc ra trường luôn). Có mã này mới tính tiếp việc sửa như thế nào. Còn nếu bạn muốn sửa đại đi thì tôi giúp theo kiểu đại đi được không?

dạ, anh giúp em với, em chỉ quan tâm là sửa dc thôi.**~****~**
 
Upvote 0

File đính kèm

Upvote 0
sau khi nhập dữ liệu vào ô tìm kiếm, hiện ra kết quả dò tìm thì ok, nhưng khi sửa dữ liệu vừa mới tìm kiếm thì bị lỗi.
cụ thể, sau khi sửa thì nó lại insert thêm 1 dòng mới chứ không phải sửa ngay vị trí mình cần sửa
anh chị sửa lại giúp em với
góp ý đến bạn:
quản lý điểm mà còn làm form như vậy tốn thời giờ thiết kế, viết code, chỉnh sửa hẳn trên sheet còn nhanh hơn, đâu phải trên sheet không lọc dữ liệu được đâu. nó còn nhanh và tiện hơn cả trên form.
mình chỉ nên thiết kế form khi dữ liệu bạn nhìn ớn lạnh, nhìn vô chỉnh sửa nhầm thì lúc đó mới nên thiết kế form.
hoặc form hỗ trợ bạn làm nhiều công việc 1 lúc thì hãy dùng đến form, còn mấy công việc như này thì tui làm thủ công còn nhanh hơn cả bạn làm trên form.
Có cái dò tìm với chỉnh sửa này thôi mà lần nào lên "tìm bài mới" cũng thấy hết. mấy bài cần thấy thì chả thấy. toàn 3 cái trên diễn dàn cả đống mà cứ hỏi đi hỏi lại miết. lúc bạn đặt tiêu đề thì nó có hiện ra gợi ý bài đó. xem có cái nào trùng ý thì nhấn vào xem. cần chi phải tạo bài mới.-0-/.
tôi thiết kế lại cho gọn thôi. không thích thì cứ kéo lại như cũ.
tốt nhất không nên chèn ảnh vào form, màu mè hoa lá hẹ mà chả được tích sự gì. làm nặng file hơn. dữ liệu chút éc mà mất 273KB
có gì tải sớm đi. hết dung lượng là tui xóa file à.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Để tránh lỗi sửa câu này:

If ColSearch = 1 Then gtri = Int(TextBox1) Else gtri = TextBox1

Thành câu này:

If ColSearch = 0 Then gtri = Int(TextBox1) Else gtri = TextBox1
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom