Tra cứu mã học sinh ở bất kỳ file nào.

Liên hệ QC

LienDong

Thành viên thường trực
Tham gia
22/11/12
Bài viết
218
Được thích
46
Nghề nghiệp
Ai nói đúng thì làm!
Em có 1 file danhsachlop để trong ổ D thư mục Lien, trong file này tổng hơp danh sách các lớp
Khi em mở 1 file mới(trắng) Em muốn tra cứu số báo danh của 1 học sinh bất kỳ, ví dụ: trong ô A5 em nhập số báo danh 5A1_02 thì ô bên phải kế bên sẽ hiện các thông tin của số báo danh này(ô B5 = Bùi Đức Anh; ô C5 = 04/08/2009; ô D5 = x; ô F1 =5A1; ...)
Khi tra cứu thì không cần mở file danhsachlop lên
Vì các giáo viên trong trường muốn dùng máy tính em để tra cứu nhanh thông tin
Bài này có dùng lập trình được không các anh, chị? Nếu được thì xin giúp em, Em cảm ơn
 

File đính kèm

Trong danhsachlop lớp 5A2 chỉ có 10 học sinh , bây giờ thêm 1 học sinh nữa, rồi chọn nó thì nó báo lỗi anh ạ
Trong hình chọn 5A2_11 thì nó bị lỗi
loi1.png
 
Upvote 0
Sau khi kiểm tra thì em thấy như thế này
Nếu file danhsachlop sửa thì không sao nhưng thêm mới thì bị lỗi
Run Time Error 9: "Subscript out of range"
tô màu vàng ở dòng
Private Sub cbmshs1_Change()

cbmshs2.Enabled = True

ReDim mshs2(1 To UBound(mshs1) - cbmshs1.ListIndex - 1, 1 To 1)

irow = 0
Nhờ bạn xem lại, cảm ơn nhiều.
UBound(mshs1) - cbmshs1.ListIndex-1 = 10- 9-1=0
10-(9-1)=1
 
Lần chỉnh sửa cuối:
Upvote 0
Bài này dùng làm bảng tra từ điển tự lập thì cũng ngon,
anhdepjai chỉ cần thêm nút read nữa thì OK
 
Upvote 0
Em có 1 file danhsachlop để trong ổ D thư mục Lien, trong file này tổng hơp danh sách các lớp
Khi em mở 1 file mới(trắng) Em muốn tra cứu số báo danh của 1 học sinh bất kỳ, ví dụ: trong ô A5 em nhập số báo danh 5A1_02 thì ô bên phải kế bên sẽ hiện các thông tin của số báo danh này(ô B5 = Bùi Đức Anh; ô C5 = 04/08/2009; ô D5 = x; ô F1 =5A1; ...)
Khi tra cứu thì không cần mở file danhsachlop lên
Vì các giáo viên trong trường muốn dùng máy tính em để tra cứu nhanh thông tin
Bài này có dùng lập trình được không các anh, chị? Nếu được thì xin giúp em, Em cảm ơn
Bạn thử vậy xem đúng ý không nhe
Code bỏ vào sheet cần tra cứu nhập mã từ A5 trở xuống

Mã:
Dim Dic As Object

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim sRng As Range, Res(), S As Variant, i As Long, sRow As Long
 
  Application.EnableEvents = False
  Application.ScreenUpdating = False
  Set sRng = Intersect(Range("A5:A600000"), Target)
  If Not sRng Is Nothing Then
    If Dic Is Nothing Then Call CreateDic
    If Not Dic Is Nothing Then
      sRow = sRng.Rows.Count
      ReDim Res(1 To sRow, 1 To 5)
      For i = 1 To sRow
        S = Dic.Item(sRng(i, 1).Value)
        If TypeName(S) = "Variant()" Then
          Res(i, 1) = S(0): Res(i, 2) = S(1): Res(i, 3) = S(2): Res(i, 4) = S(3): Res(i, 5) = S(4)
        End If
      Next i
      sRng.Offset(0, 1).Resize(, 5).Value = Res
    End If
  End If
  Application.EnableEvents = True
  Application.ScreenUpdating = True
End Sub

Private Sub CreateDic()
  Dim sArr As Variant, j As Long, k As Long, iKey
 
  On Error Resume Next
  With CreateObject("ADODB.Connection")
    .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\danhsachlop.xlsb;Extended Properties=""Excel 12.0;HDR=No"""
    sArr = .Execute("select * from [DATA$B2:G1000000] where f1 is not null").GetRows
  End With
  If Err.Number = 0 Then
    Set Dic = CreateObject("Scripting.Dictionary")
    For j = 0 To UBound(sArr, 2)
      iKey = sArr(0, j)
      If Len(iKey) > 0 Then
        If Not Dic.exists(iKey) Then
          Dic.Add iKey, Array(sArr(1, j), sArr(2, j), sArr(3, j), sArr(4, j), sArr(5, j))
        End If
      End If
    Next
  Else
    MsgBox ("Khong tìm thay File tra cuu")
    On Error GoTo 0
  End If
End Sub
 

File đính kèm

Upvote 0
Cảm ơn các bạn nhiều
 
Upvote 0

File đính kèm

  • them.png
    them.png
    24.7 KB · Đọc: 4
Upvote 0
Em có 1 file danhsachlop để trong ổ D thư mục Lien, trong file này tổng hơp danh sách các lớp
Khi em mở 1 file mới(trắng) Em muốn tra cứu số báo danh của 1 học sinh bất kỳ, ví dụ: trong ô A5 em nhập số báo danh 5A1_02 thì ô bên phải kế bên sẽ hiện các thông tin của số báo danh này(ô B5 = Bùi Đức Anh; ô C5 = 04/08/2009; ô D5 = x; ô F1 =5A1; ...)
Khi tra cứu thì không cần mở file danhsachlop lên
Vì các giáo viên trong trường muốn dùng máy tính em để tra cứu nhanh thông tin
Bài này có dùng lập trình được không các anh, chị? Nếu được thì xin giúp em, Em cảm ơn
Góp ý cho bạn: Ý tưởng thì có nhưng đi đường vòng quá xa.
1/ Nên làm hoàn chỉnh và sử dụng 1 sheet chứa danh sách các lớp chung trong 1 File.
2/ Sau đó sử dụng UserForm tìm ngay sheet chứa danh sách các lớp, chứ không ai để riên File rồi truy tìm đến File đó để tra.
 
Upvote 0
Web KT

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

Back
Top Bottom