Nhờ trợ giúp code tìm kiếm trong form (1 người xem)

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

van_thanh_phong

Thành viên chính thức
Tham gia
25/6/08
Bài viết
87
Được thích
10
Nghề nghiệp
Giáo viên
Nhờ sự giúp đỡ nhiệt tình của bác Sealand mà tôi đã có một form nhập liệu hơn cả mong đợi.
Sau khi sử dụng lại nảy sinh vấn đề là
1. Tìm kiếm dữ liệu trong form thỏa mãn một số điều kiện
Có thể tìm theo tên học sinh,năm sinh,nữ,DT,MSHS(xem file đính kèm sẽ chi tiết hơn) hoặc nhiều điều kiện cùng một lúc
2. Sau khi tìm xong nếu click vào nút lệnh:"Trích xuất dữ liệu" sẽ tạo 1 sheet mới với nội dung là dữ liệu vừa tìm được
Rất mong được sự giúp đỡ của của các thành viên.
Chân thành cảm ơn !
 
Chỉnh sửa lần cuối bởi điều hành viên:
Yêu cầu của bạn mình cũng đã từng tham gia với 1 số bạn, nhưng mình thấy tầm hỏi của bạn chắc chưa thể sưu tầm tự làm được (Nếu không phải thông cảm nha), mình sẽ cùng bạn làm 1 lần nữa. Trước hết, 1 số vấn đề bạn phải thống nhất;
-Đúng sai cũng phải có ý kiến phản hồi để còn biêt mình làm đúng hay sai.
-Nhập thật nghiêm túc hồ sơ 10 học sinh trở lên. Nhiều vì còn Test lọc, nhập nghiêm túc vì nó sẽ ảnh hưởng đến kết qủa lọc
-Để dễ sử lý chỉ nên lọc 1 điều kiện mỗi lần lọc thôi. Khi nắm vũng sẽ triển khai lọc đa điều kiện
 
Upvote 0
Trước hết minh rất cảm ơn tấm chân tình tận tình giúp đỡ của Anh Sealand !Quả thực mình không biết phải cảm ơn như thế nào nữa,mình rất muốn học hỏi!
file trước của Sealand giúp mình rất nhiều về cod để mình học tập.Diễn đàn thực là một lớp học lí tưởng cho những ai có trình độ y tờ như mình!
( Tìm theo tên học sinh không phân biệt chữ hoa hay chữ thường)
Minh quên !file trước của bạn gởi cho mình còn 1 chỗ sót.Mình đã chạy thử và sửa lại rồi nên không thông báo cho bạn biết.thành thật xin lỗi bạn !
 
Lần chỉnh sửa cuối:
Upvote 0
-Đúng sai cũng phải có ý kiến phản hồi để còn biêt mình làm đúng hay sai.
-Nhập thật nghiêm túc hồ sơ 10 học sinh trở lên. Nhiều vì còn Test lọc, nhập nghiêm túc vì nó sẽ ảnh hưởng đến kết qủa lọc
-Để dễ sử lý chỉ nên lọc 1 điều kiện mỗi lần lọc thôi. Khi nắm vũng sẽ triển khai lọc đa điều kiện

Mình xin gửi đến bạn dữ liệu để tạo code tim kiếm (van_thanh_phong đã mở topic). dữ liệu có chữ hoa, chữ thường có ảnh hưởng gì không bạn? (nếu có bạn vui lòng chỉnh lại giúp-có 2 dòng thôi)

Mình nghĩ sao lại không để dữ liệu tự xuất hiện thay vì phải bấm "TIM KIEM", bạn thấy có hợp lý không?

Cám ơn bạn đã dành thời gian để giúp mình.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Rất cảm ơn bạn đã góp ý,mình thấy như vậy cũng rất tiện lợi.
Tìm theo tên không phân biệt chữ hoa hay chữ thường( đễ dễ dàng tìm kiếm !)
 
Upvote 0
Ở đây ta lọc theo tiếng Việt có dấu nên khi so sánh gặp rất nhiều khó khăn, mình cứ mạo muội đưa ra 1 phương án, các bạn tham khảo xem. Trên diễn đàn đã có hàm chuyển Tiếng Việt thành không dấu (Hình như của Hoang Danh thì phải) ta sưu tầm về ghép vào để tìm theo không dấu và không phân biệt Hoa-Thường cho tiện sử dụng.
Việc xoá và tạo mới 1 sheet Kqua theo minh không cần thiết mà làm chậm tốc độ sử lý. Ta cứ tạm dùng Sheet K/Quả
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Sealand đã nhiệt tình giúp đỡ !mình thấy như vậy là cũng tạm ổn rồi.Mình sẽ coi lại cod, có gì không hiểu mình sẽ nhờ Sealand trợ giúp !Mình biết hỏi nhiều sẽ làm các thành viên trong diễn đàn thấy ác cảm và khó chịu!Nhưng trình độ y tờ như mình thì............
Rất mong sự giúp đỡ của các thành viên trong diễn để mình ngày càng tiến bộ!
Chân thành cảm ơn !
 
Upvote 0
Bạn lại sai rồi, hoàn toàn không có vấn đề gì khi hỏi nhiều. Cái khó là bố trí thế nào để ngoài cái riêng của mỗi người, chúng ta cùng nhau làm được cái gì đó. Mình biết là nó rất nhỏ nhoi, nhưng nó cũng là niềm vui chứ. Chúng ta đều là những người kẻ trước người sau thôi.
 
Upvote 0
Để cho bắt mắt, tiện quan sát ta đổi sang dùng Listview thay cho ListBox. Nhưng ta phải sử lý tiếng Việt vì Listview không hỗ trợ Unicode. Tiện thể, mình cũng sử lý chỉ cần gõ lọc không dấu chữ thường là được.
Mình chép 2 hàm sử lý của anh Phạm Duy Long.
 

File đính kèm

Upvote 0
Cách viết của Sealand rất dễ hiểu.
Dùng chươngng trình con(tạm gọi như vậy), khi nào cần dùng thì gọi ra mà dùng như vậy rất dễ cho người học.Qua các file của Sealand tôi học học được rất nhiều.
Nhưng vì trình độ tôi y tờ quá nên có những chỗ đọc hoài mà như " nước đổ lá khoai".Sealand có thể giải thích giùm được không !
PHP:
Sub napDS()
Dim It As ListItem
Dim Rg As Range, Kt As Boolean
Dim i, j, k
If Me.L_Ds.ListItems.Count > 0 Then Me.L_Ds.ListItems.Clear
Set Rg = HS.Range("B5:M" & HS.[b65536].End(xlUp).Row)
For i = 1 To Rg.Rows.Count
If Ktra(i + 4, Me.C_cot.ListIndex + 2, dk1, dk3) Then
Set It = Me.L_Ds.ListItems.Add(, , i + 4)
For j = 1 To 12
It.SubItems(j) = UV(Rg.Cells(i, j))
Next
End If
Next
If Me.L_Ds.ListItems.Count > 0 Then Me.L_Ds.ListItems(1).Selected = True
End Sub

Và còn vài chỗ nữa mình cũng.....nhưng khi nào hiểu được cái này rồi mới tính tiếp và nhờ Sealand chỉ giúp !
Cảm ơn vì tấc cả những gì Sealand đã dạy cho mình!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Thông cảm mình rườm rà 1 chút, bạn dùng động từ dạy mà mình ngại quá, chỉ là chỉ bảo nhau chút thôi:

Mã:
Sub napDS()
Dim It As ListItem
  Dim Rg As Range, Kt As Boolean
Dim i, j, k
  ‘Khai báo các biến có liên quan
  
If Me.L_Ds.ListItems.Count > 0 Then Me.L_Ds.ListItems.Clear
  ‘Nếu List dã có dòng nào thì xoá đi để nạp mới
  
Set Rg = HS.Range("B5:M" & HS.[b65536].End(xlUp).Row)
  ‘Gán biến Rg cho vùng dữ liệu nguồn cần nạp
  
For i = 1 To Rg.Rows.Count
  ‘Lần lượt từng dòng trong vùng

If Ktra(i + 4, Me.C_cot.ListIndex + 2, dk1, dk3) Then
  ‘ Kiểm tra dữ liệu nếu đã đánh dấu nút lọc và chuỗi đk3 có tìm thấy thì
  
Set It = Me.L_Ds.ListItems.Add(, , i + 4)
  ‘Thêm 1 mục danh sách với tên mục bằng dòng dữ liệu trên Sheet
  
For j = 1 To 12
  It.SubItems(j) = UV(Rg.Cells(i, j))
  ‘Từ cột đến cột 12 điền giá trị ô 1 dến ô 12 dòng i


  Next
End If
Next
If Me.L_Ds.ListItems.Count > 0 Then Me.L_Ds.ListItems(1).Selected = True
  ‘Nếu có dòng DS thì đưa con trỏ về dòng đầu tiên
  
End Sub
Có 1 mẹo nhỏ ở đây: Cột đầu là cột trả về giá trị như =Listview1.ListItems(i)
Vậy thì ta gắm luôn cột 1 bằng i+4 tức là số TT dòng trong bảng tính, khi cần sử lý thì chỉ việc lấy số này là số dòng trong bảng tính. Nó đảm bảo chính xác tuyệt đối chứ không bị sai sót như sử dụng phương thức tìm kiếm khác.
 
Lần chỉnh sửa cuối:
Upvote 0
Khi tham khảo và sử dụng file của Sealand trợ giúp quả thực rất hữu ích trong quá trình học tập và ứng dụng.
Trong khi sử dụng lại nảy sinh yêu cầu là săp xếp lại cột họ và tên trong sheet KET QUA TIM KIEM theo thứ tự từ A -->Z
Ví dụ:Trần văn A tên là A
Nguyễn thị Minh Hằng tên là Hằng
Khi click vào nút lệnh ho va ten (trong file đính kèm ) sẽ sắp xếp lại cột họ và tên theo tên.Rất mong được sự trợ giúp của các thành viên trong diễn đàn .
Chân thành cảm ơn!
 
Lần chỉnh sửa cuối:
Upvote 0
Cái vụ sắp xếp tiếng Việt này không đơn giản đâu nha. Nên để dịp khác tiêu hoá ổn rồi tính sau.
Tham khảo tiện ích của bác Phạm Duy Long với mã nguồn mở nha. Sau ta tích hợp code vào file và sử lý.
 
Upvote 0
Ta có thể dùng hàm để tách tên
PHP:
Private Function Tachten(ten As String, lg As Integer)
Dim j As Integer
Name = Trim(ten)
For j = Len(Name) To 1 Step -1
If Mid(Name, j, 1) = " " Then
If lg = "1" Then
Tachten = Right(Name, Len(Name) - j)
Else
Tachten = Left(Name, j)
End If
Exit For
End If
Next
End Function
Rồi gán tên vào một cột, sau đó sort cột đó.nhưng để viểt một nút lệnh hoàn chỉnh thì mình đành bó tay.Rất mong Sealand chỉ giúp
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Cái hàm tách tên của bạn là chuyện ngày xưa mất rồi. Bạn không thấy tên diễn đàn sao?-GIAI PHAP
GPE không những cùng nhau tìm cách giải quyết vấn đề mà còn hoàn thiện nữa. Ví dụ hôm nay mình đưa ra 1 hàm tách tên khác tuy ngắn nhưng tốc độ chắc chắn hàm bạn nêu phải nể. Bạn xem nhé:

Mã:
Function Tachten(Hoten As String)
Dim tam
If InStr(1, Hoten, " ") = 0 Then Tachten = "": Exit Function
tam = Split(Hoten, " ")
Tachten = tam(UBound(tam))
End Function
 
Upvote 0
Trình độ y tờ của mình thì làm sao so sánh với Sealand được !.Quả thực hàm tách tên của Sealand làm mình thán phục !tốc độ rất nhanh
(Hàm này sẽ hoàn thiện hơn nếu bổ sung: hoten=trim(hoten) )
À! còn việc mình nhờ Sealand lúc trước thì sao !( Tạo nút lệnh sắp xếp theo tên ).Sealand giúp mình nhé!
 
Lần chỉnh sửa cuối:
Upvote 0
Mình nói vậy không phải không phải mình so sánh giữa mình và bạn mà ý mình là chúng ta gom nhặt được gì sau bao công tìm tòi của mọi người. Nói thực, đây là kết quả của nhiều lần Ndu và 1 số bạn khác giới thiệu 2 hàm sử lý chuỗi là Split và Join mình rất thích.
Còn sắp xếp thì mình làm sau 1 chút.

Bạn kiểm tra giùm nha (Cái này chỉ xếp theo tên như bạn yêu cầu)
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Thật tuyệt!
Sealand thật nhiệt tình quá !
Mình có vấn đề này nhờ Sealand chỉ thêm cho
Tại cell D3 minh nhập ngày tháng năm sinh. có thể dạng số hoặc dạng chuỗi kí tự: Vd:12/03/1998 hoặc 1998 đều được
Minh đã dùng công thức để tính tuổi tại cell E3 như sau:
=value(year(now())) - value(right(trim(D3),4))
nhưng khi dùng trong công thức này chung với sheet có cod thì chạy rất chậm( Khoảng 6s mới xong 1 Record )
Vậy có cách nào viết cod tính tuổi theo yêu cầu trên không ? (nhập tuổi dạng: dd/mm/yyyy hay yyyy đều được )
Chân thành cảm ơn !
 
Upvote 0
Bạn có thể bỏ 2 hàm value cũng được. Chắc là có vấn đề gì đó chứ mình cho đây là công thức nhanh rồi (Công thức gốc Exc mà)
Bạn nói đến 6s thì kỳ lạ thật.
 
Upvote 0
Mình gởi file để Sealand kiểm tra thử xem thế nào nha!
Nút lệnh OK trong EditRecord và nút lệnh sắp xếp họ và tên cũng rất chậm (khoảng 7 s).
Cảm ơn nhiều !
 
Upvote 0
Trời, cái hàm tính tuổi của bạn nặng quá đi mất. Mình xoá nó đi và đưa nó vào 1 nút trên Form thì nó nhẹ tênh. Bạn kiểm tra xem. Mà đã code thi thậm chí bảng thống kê cũng code luôn. Như vậy khi dữ liệu lớn file mới chạy trơn tru được.
 

File đính kèm

Upvote 0
Ở bảng thống kê dùng cod thì tuyệt vời quá nhưng mình dùng công thức mảng mình dùng công thức mảng cũng tạm ổn vid nó độc lập không ảnh hưởng đến tốc độ xử lí của cod( và vì........ do trình độ của minh.....không thể làm được).
Rất cảm ơn sự nhiệt tình của Sealand.
Minh hi vọng rằng trong diễn đàn ai cũng như Sealand thì đây thực sự là ngôi trường chung cho tấc cả mọi người muốn đến với excel.
 
Upvote 0
Bạn quá khen , mình ngượng lắm. Vào diễn đàn trao đổi nó là 1 cách thư giãn của mình mà.
Nếu gặp trương hợp như thế này nên tạm thời chuyển Caculate sang Manual. Khi nào xem báo cáo thì chuyển lại sẽ cải thiện tốc độ làm việc
 
Lần chỉnh sửa cuối:
Upvote 0
Sealand kiểm tra lại dùm sheet THONG KE THEO TUOI sao vẫn không thống kê được.Khi thay đổi năm sinh thì kết quả thống kê vẫn không đổi.
Cảm ơn !
 
Upvote 0
Sealand kiểm tra lại dùm sheet THONG KE THEO TUOI sao vẫn không thống kê được.Khi thay đổi năm sinh thì kết quả thống kê vẫn không đổi.
Cảm ơn !
Bạn nhấn F9 xem thế nào.
Do calculation ở chế độ manual. Nghiên cứu Menu\Tools\Options\Calculation\Automatic.
Sao không viết code cho phần thống kê luôn.
 
Upvote 0
Mình đã hiệu chỉnh lại như ThuNghi hướng dẫn và kết quả........ như mong đợi !
Phần thống kê này khá phức tạp nên mình không thể viết nổi.Mình chỉ có thể dùng công thức mảng thôi.Rất mong các thành viên trong diễn đàn trợ giúp!
Chân thành cảm ơn !
 
Lần chỉnh sửa cuối:
Upvote 0
Phần thống kê nó chỉ có vậy hay còn nhiều hơn, nếu chỉ có vậy thì code chẳng ngại lắm.
 
Upvote 0
Mình đã hiệu chỉnh lại như ThuNghi hướng dẫn và kết quả........ như mong đợi !
Phần thống kê này khá phức tạp nên mình không thể viết nổi.Mình chỉ có thể dùng công thức mảng thôi.Rất mong các thành viên trong diễn đàn trợ giúp!
Chân thành cảm ơn !
Bạn dùng code này xem thế nào, chưa test hết và rút gọn.
PHP:
Sub ThKe()
Dim endR As Long, i As Long, iT As Long, s As Long, iC As Long, sotuoi As Long
Dim Arr(), ArrKQ(1 To 9, 1 To 20)
With Sheets("DSHS")
  endR = .Cells(65000, 1).End(xlUp).Row
  Arr = .Range("B5:O" & endR).Value
End With
For iT = 11 To 19
  s = iT - 10
  For i = 1 To UBound(Arr)
    Select Case UCase(Left(Arr(i, 12), 2))
      Case "K6"
        iC = 4
      Case "K7"
        iC = 8
      Case "K8"
        iC = 12
      Case "K9"
        iC = 16
    End Select
    sotuoi = Arr(i, 14)
    If sotuoi > 19 Then sotuoi = 19
    If sotuoi = iT Then
      ArrKQ(s, 1) = ArrKQ(s, 1) + 1
      ArrKQ(s, 1 + iC) = ArrKQ(s, 1 + iC) + 1
      If Len(Arr(i, 2)) > 0 Then 'Nu'
        ArrKQ(s, 2) = ArrKQ(s, 2) + 1
        ArrKQ(s, 2 + iC) = ArrKQ(s, 2 + iC) + 1
      End If
      If Len(Arr(i, 3)) > 0 Then 'DanToc'
        ArrKQ(s, 3) = ArrKQ(s, 3) + 1
        ArrKQ(s, 3 + iC) = ArrKQ(s, 3 + iC) + 1
      End If
      If Len(Arr(i, 2)) > 0 Then 'Nu'
        If Len(Arr(i, 3)) > 0 Then 'DanToc'
          ArrKQ(s, 4) = ArrKQ(s, 4) + 1
          ArrKQ(s, 4 + iC) = ArrKQ(s, 4 + iC) + 1
        End If
      End If
    End If
  Next i
Next iT
With Sheet1.Range("C6")
  .Resize(9, 20) = ArrKQ
End With
Erase Arr, ArrKQ

End Sub
 
Upvote 0
Mình đã tich hợp cod vào form.Kết quả thật không khác gì làm công thức.Nhưng rất chuyên nghiệp và tốc độ xử lí của cod cũng rất nhanh.
Quả là cao thủ có khác!
Mình rất nể trình độ cod và lòng nhiệt của Sealand và ThuNghi.
Rất cảm ơn vì tấc cả !
 
Upvote 0
Nhờ các thành viên trong GPE chỉ giúp đoạn cod để LoadRecord vào form nhé !
Giả sử mình đã có 1 chuong tình con LoadRecord
Nếu dòng nào là dòng hiện hành thì Load dòng đó vào form và nếu nội dung trong form ở dòng nào thì tô màu dòng hiện hành
Ví dụ:dòng 5 là dòng hiện hành thì load nội dung dòng 5 vào form và dòng 5 được tô màu
Chi tiết xem file nhé !
Rất mong được các thành viên trong diễn đàn trợ giúp !
Chân thành cảm ơn !
 
Upvote 0
Hình như bạn chưa hiểu hết Code trong bài rồi chính đoạn Code sau là Code load data. Bạn cần thay đổi dòng thì chỉ việc can thiệp vào ô Dg trên Fỏm hay biến i:

Mã:
Sub loaddata()
Dim i
i = Val(Me.dg)
With HS
Me.TextName = .Cells(i, 2)
Me.CheckBoxNU = IIf(UCase(.Cells(i, 3)) = "X", True, False)
Me.CheckBoxDT = IIf(UCase(.Cells(i, 4)) = "X", True, False)
Me.TextNamsinh = .Cells(i, 5)
Me.TextNoisinh = .Cells(i, 6)
Me.TextDC = .Cells(i, 7)
Me.TextTENCHA = .Cells(i, 8)
Me.TextNGHECHA = .Cells(i, 9)
Me.TextTENME = .Cells(i, 10)
Me.TextNGHEME = .Cells(i, 11)
Me.TextSDT = .Cells(i, 12)
Me.TextMSHS = .Cells(i, 13)
Me.TextBoxghichu = .Cells(i, 14)
End With
End Sub

Bạn lưu ý có 1 số vấn đề cần thận trong là bảng tính khác Record. Record chỉ di chuyển được từ bản ghi 1 đến bản ghi cuối còn bảng tính lại di chuyển được lên trên dòng tiêu đề hay sau dòng data cuối. Vậy khi dòng hiện hành là tiêu đề hay vùng trống cần khoá.
Form của bạn là loại có thể chuyển đổi từ View sang Edit thì khi view đã làm việc load dữ liệu lên Form rồi.
 
Lần chỉnh sửa cuối:
Upvote 0
Ý mÌnh là khi con trỏ đang ở dòng nào trong bảng tính excel thì nội dung các cột ở dòng đó hiển thị lên form !
Chân thành cảm ơn SeaLand !
Sea land kiểm tra lại dùm mình lỗi sau nha:
Khi chọn deleteRecord=>cancel.Rồi chọn lại NewRecord thì không tạo một Record mới mà lại load Record cuối cùng lên cho cúng ta thực hiện nút lệnh Edit.Vậy phải sửa lại cod như thế nào ?
Rất mong được sự trợ giúp của Các thành viên trong diễn đàn !
 
Lần chỉnh sửa cuối:
Upvote 0
1/Vậy thì chỉ cần sửa Code của nút "NHAP THONG TIN HOC SINH" như sau là được

Mã:
Private Sub CommandButton1_Click()
Call UserForm1.Show(vbmodless)
If Selection.Row < 5 Then
UserForm1.dg = 5
ElseIf Selection.Row > HS.[b65536].End(xlUp).Row Then
UserForm1.dg = HS.[b65536].End(xlUp).Row
Else
UserForm1.dg = Selection.Row
End If
End Sub

2/ Code nút Delete sửa như sau

Mã:
Private Sub CommandButton5_Click()
Dim Kt
Kt = MsgBox("Ban co thuc su muon xoa ho so nguoi nay ?", vbOKCancel, "QUAN LY HOC SINH")
If Kt = 1 Then
HS.Rows(Me.dg).EntireRow.Delete
If Me.Navi1.Max > 1 Then Me.Navi1.Max = Me.Navi1.Max - 1
loaddata
setsott
End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Nút lệnh delete thì được rồi nhưng mà khi con trỏ đang ở dòng nào trong bảng tính excel thì nội dung dòng đó hiển thị lên form thì vẫn chưa được.Mình gởi file nhờ Sealand kiểm tra dùm nha
 
Upvote 0
Trong vùng Code của Sheet HS bạn nhập doạn Code này vào (Mình thực sự chưa hiểu chính xác câu hỏi của bạn):

Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Target.Row >= 5 And Target.Row <= HS.[b65536].End(xlUp).Row Then
 UserForm1.dg = Target.Row
 End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
sao bạn không làm 1 cái list view mà lại làm thanh scroll vậy, thiết kế form như kiểu này thì mình mới được chiêm ngưỡng lần đầu. Trong diễn đàn cũng có các bài của anh yeudoi và vungoc đã làm các phần mềm quản lý nhân viên, hsinh, svien bằng listview. Chỉ khi click vào tên của người nào thì toàn bộ thông tin sẽ show hết trong các ô trên form. Như vậy nhìn đẹp và pro hơn.
 
Lần chỉnh sửa cuối:
Upvote 0
Đoạn cod này thì kết quả như mong đợi rồi.Ý mình là như vậy!
Cảm ơn Sealand rất nhiều
 
Upvote 0
Mình vào Proprerties nhưng mà không thấy customize đâu cả,vầy phải làm sao thấy được customize để tham khảo ?
Cảm ơn !
 
Upvote 0
Bạn không nói rõ Properties của cái gì thì sao mà trả lời
 
Upvote 0
Cảm ơn Sealand mình đã làm được rồi !
Mình vừa mua được quyển lập trình VBA trong excel của tác giả Phan Tự Hướng.trong quá trình học có gì không hiểu xin nhờ Sealand chỉ giúp nhé !
 
Upvote 0
Các bác cho em hỏi là làm cách nào để có thể scroll listbox (trong userform tìm kiếm học sinh) được như trong file Quan Lý Học Sinh trên ạ?
 
Upvote 0
Đấy là 2 cái riêng biệt, dùng code để liên kết chúng lại với nhau. Chúng đều là những thứ có sẵn trên Toolbox mà.
 
Upvote 0
Ở "cột B của sheet:HS" (Dữ liệu không hạn chế số cột) có Họ và tên của học sinh
Làm thế nào để chuyển cod sau thành hàm để sử dụng vào bất kì vùng dữ liệu nào
Ví dụ:
=sortname("vùng dữ liệu được chọn")
PHP:
Sub sortname()
Dim Rg, cl As Range
Set Rg = HS.Range("B2:B" & HS.[b65536].End(xlUp).Row) 
For Each cl In Rg
cl.Offset(, 14) = Tachten(cl.Text)
Next
  Rg.Resize(, 15).Sort Key1:=Range("p5"), Order1:=xlAscending, Header:=xlNo
 Rg.Offset(, 14).ClearContents
End Sub

Function Tachten(Hoten As String)
Dim tam
Hoten = Trim(Hoten)
tam = Split(Hoten, " ")
Tachten = tam(UBound(tam))
End Function
Rất mong được sự trợ giúp của các thành viên trong diễn đàn !
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Bạn có thể viết lại hàm như sau:

Mã:
Option Explicit
Function Sortname(Rg As Range, Idx As Integer, k)
   If Rg.Cells.Count = 0 Or Idx < 1 _
      Or Idx > Rg.Cells.Count Then
        Sortname = "": Exit Function
          End If
 Dim Mg2(), Mg1(), ten, tam1, tam2, i, j
    ReDim Mg1(Rg.Cells.Count)
       For i = 0 To Rg.Cells.Count - 1
           Mg1(i) = Rg.Cells(i + 1)
            Next
ReDim Mg2(UBound(Mg1))
    For i = 0 To UBound(Mg2) - 1
       ten = Split(Trim(Mg1(i)), " ")
           Mg2(i) = ten(UBound(ten))
              Next
For i = 0 To UBound(Mg1) - 1
   For j = i To UBound(Mg1) - 1
       If IIf(k = 1, Mg2(i) > Mg2(j), Mg2(i) < Mg2(j)) Then
          tam1 = Mg1(i): tam2 = Mg2(i)
             Mg1(i) = Mg1(j): Mg2(i) = Mg2(j)
               Mg1(j) = tam1: Mg2(j) = tam2
                  End If: Next: Next
Sortname = Mg1(Idx - 1)
End Function

Hàm này mới thực hiện theo việc chuyển Code thôi phần sắp xếp tiếng Việt chưa sử lý
 

File đính kèm

Upvote 0
Rất cảm ơn Sealand đẫ tận tình chỉ giúp, song minh nghỉ hàm này chỉ để mình học tập thôi còn khi đưa vào áp dụng thì cần phải hiệu chỉnh lại nhiều lắm.
Mình nhờ Sealand thêm một việc nha!
-Mình gởi file nhờ Sealand kiểm tra dùm nha,xem có cần hiệu chỉnh hay bổ sung thêm gì không
-Kiểm tra dùm mình sheet TIM KIEM : có cách nào chuyển bỏ sheet TIM KIEM, chuyển giao diện và cod vào sử dụng trong form hay không?
 

File đính kèm

Upvote 0
Nói chung, các Form khá ổn rồi. Riêng việc tìm kiếm thì bạn có thể bổ xung Form tìm kiếm để trở thành tìm kiếm đa chức năng. Nhưng tìm kiếm điều kiện nhiều quá thành khó tìm, nên ghép đến 2 điều kiện đã là nhiều. Cái chính của việc tìm kiếm là chưa có: -Tìm để làm gì?
Đối với file này hiện còn thiếu rất nhiều đầu ra: -Report! Cần hàng loạt các báo cáo kết xuất phục vụ công tác quản lý HS nữa. Đấy mới là kết quả cuối cùng cần cho người sử dụng. Giờ bạn nên tập trung vào đó. Và cũng từ đó phất sinh yêu cầu dữ liệu, điều chỉnh dữ liệu.
 
Upvote 0
Cho mình hỏi trong excel có hàm, hay công thức(có thể là công thức mảng) nào sort Họ và tên theo tên hay không.
Vì tiện ích của thầy Long chỉ tách tên rồi sau sort cột tên vừa tách như vậy mất thời gian vì phải qua 2 công đoạn:tách tên =>sort tên.
Nếu tạo một add_in gồm (tách + sort) như vậy có thể sử dụng được dài lâu thì sẽ tốt hơn! (Mình nghỉ lả như vậy !)
Rất cảm ơn sử trợ giúp và góp ý chân thành của Sealand !
 
Lần chỉnh sửa cuối:
Upvote 0
Để cho bắt mắt, tiện quan sát ta đổi sang dùng Listview thay cho ListBox. Nhưng ta phải sử lý tiếng Việt vì Listview không hỗ trợ Unicode. Tiện thể, mình cũng sử lý chỉ cần gõ lọc không dấu chữ thường là được.
Mình chép 2 hàm sử lý của anh Phạm Duy Long.

Bác ơi. Em gửi mail và tin nhắn cho bác nhưng đều báo không gửi được. Bác có thể cho em địa chỉ mail của bác lại không ạ? Thank bác nhiều!
 
Upvote 0
Bác ơi. Em gửi mail và tin nhắn cho bác nhưng đều báo không gửi được. Bác có thể cho em địa chỉ mail của bác lại không ạ? Thank bác nhiều!

Email của mình vẫn vậy, nhưng thời gian vừa rồi mình bận chuyện gia đình nên ít check nên không biết. Rất mong thông cảm.
Nhân đây, bạn có thể nhắc lại vấn đề của bạn để anh em cùng nghiên cứu hỗ trợ nhau được không?
 
Upvote 0
Email của mình vẫn vậy, nhưng thời gian vừa rồi mình bận chuyện gia đình nên ít check nên không biết. Rất mong thông cảm.
Nhân đây, bạn có thể nhắc lại vấn đề của bạn để anh em cùng nghiên cứu hỗ trợ nhau được không?

Em gửi mail theo chữ ký mà google báo lỗi này ạ
This is an automatically generated Delivery Status Notification.

Delivery to the following recipients failed.

barristermarkallen@gmail.com




Final-Recipient: rfc822;barristermarkallen@gmail.com
Action: failed
Status: 5.5.0
Diagnostic-Code: smtp;552-5.2.2 The email account that you tried to reach is over quota. Please direct
552-5.2.2 the recipient to
552 5.2.2 https://support.google.com/mail/?p=OverQuotaPermn21si45610687pgj.254 - gsmtp




 
Upvote 0
Thực sự mình cũng không hiểu ra sao nữa, nhưng đây là địa chỉ mình thường nhận thông báo của Thuế và BHXH nữa đấy.
 
Upvote 0

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

Back
Top Bottom