Mong giúp đỡ cách load dữ liệu vào listbox với dữ liệu lớn

Liên hệ QC

xuanhiencp

Thành viên mới
Tham gia
3/1/17
Bài viết
26
Được thích
6
Xin chào anh chị em trong diễn đàn, mình có 1 vấn đề như thế này:
mình tạo 1 textbox, 1 listbox. khi mình gõ từ gợi ý vào textbox thì listbox sẽ load ra những dòng có liên quan với từ gợi ý tại textbox. nếu dữ liệu ít thì rất ok, nhưng với dữ liệu khoảng 30.000 dòng thì nó sẽ load rất lâu. mình sử dụng gợi ý trên mạng sử dụng Array, tuy nhiên nó vẫn load rất chậm, nghe nói cách sử dụng DIC thì rất nhanh mà không hình dung ra nó như thế nào, mong anh chị em giúp đỡ, mình xin đính kèm file mọi người xem, trong file mình nhập liệu tại sheets("NhatKyBanHang"), tại cột mã hàng, dữ liệu load từ sheet("DanhMucHH"). mình xin cảm ơn
 

File đính kèm

  • SỔ SÁCH.xls
    SỔ SÁCH.xls
    5.2 MB · Đọc: 28
  • VD nhập liệu.png
    VD nhập liệu.png
    23.3 KB · Đọc: 21
Lần chỉnh sửa cuối:
Xin chào anh chị em trong diễn đàn, mình có 1 vấn đề như thế này:
mình tạo 1 textbox, 1 listbox. khi mình gõ từ gợi ý vào textbox thì listbox sẽ load ra những dòng có liên quan với từ gợi ý tại textbox. nếu dữ liệu ít thì rất ok, nhưng với dữ liệu khoảng 30.000 dòng thì nó sẽ load rất lâu. mình sử dụng gợi ý trên mạng sử dụng Array, tuy nhiên nó vẫn load rất chậm, nghe nói cách sử dụng DIC thì rất nhanh mà không hình dung ra nó như thế nào, mong anh chị em giúp đỡ, mình xin đính kèm file mọi người xem, trong file mình nhập liệu tại sheets("NhatKyBanHang"), tại cột mã hàng, dữ liệu load từ sheet("DanhMucHH"). mình xin cảm ơn
1/ Bạn nên thêm 1 sheet khác và dùng nó làm phiếu nhập hàng để in phiếu và dùng nó nhập liệu vào sheet NhatKyBanHang.
2/ Thử chuyển qua sử dụng Listbox trên UserForm.
 
Lần chỉnh sửa cuối:
Upvote 0
1./ Bạn nên chú tâm tiết kiệm:
a./ Tên trang tính quá dài & chưa xác thực: Trong trang 'DanhMucHH' của bạn còn có 1 danh mục khác; Nên chăng chỉ 'DMuc' là được;
b./ Cũng vậy với trang 'NhatKyBanHang'; Nên chăng chỉ là 'NKBH'
c./ Ban có 4 Pages với 2 cặp đôi giống nhau; Nên chăng ta bớt đi phân nữa & thêm trong cả 2 Pages còn lại mỗi Page 1 ComboBox để tùy chọn: Mua hay bán; Thu hay chi
2./ Bạn xem trang 'Tìm Kiếm' trong file
 

File đính kèm

Upvote 0
Dữ liệu lớn 30.000 dòng thì nhập kiểu này chậm là chắc
Tốt nhất là bạn phải phân nhóm ra, chia nhỏ
Lập index, keyword (từ khóa) hay nói khác là lập chỉ mục thì mới nhanh được
 
Upvote 0
Dữ liệu lớn 30.000 dòng thì nhập kiểu này chậm là chắc
Tốt nhất là bạn phải phân nhóm ra, chia nhỏ
Lập index, keyword (từ khóa) hay nói khác là lập chỉ mục thì mới nhanh được
Mình không rõ việc lập chỉ mục, mong bạn nói rõ hơn được không bạn?
Bài đã được tự động gộp:

Mình cũng xin lỗi các bạn, hình như các bạn chưa hiểu ý trọng tâm của mình cho lắm, vấn đề mình gặp phải là load dữ liệu vào listbox quá chậm, mình cần giải pháp làm sao để load nhanh hơn.mình có nghe nói có cách sử dụng DIC để giải quyết mà không biết về DIC
 
Lần chỉnh sửa cuối:
Upvote 0
Trước khi sử dụng DIC thì bạn nên xem lại cách mà bạn hay CQ bạn tạo ra mã hàng hóa như vậy hợp lý chưa?
Ai đời mã lại dài lê thê thế kia & vài chỗi còn dài hơn cả tên hàng hóa (?)
Trong mã HH hiện thời của bạn thường có 3 nhóm kí số cách nhau bỡi "-"
Theo mình mã HH nên có phân ra các nhóm; Mỡi nhóm đại diện là 1 kí tự hay kí số
Vậy vị chi ta có thể có 3 chục nhóm, như:
E: Điện, điện tữ\
X: Vật liệu xây dựng
N: Đồ nhựa (mủ)
V: Văn fòng fẩm,
B Bạc đạn, vòng bi, ống lót, gối đỡ, . . .
C: Cao su, như dây cu roa, dai truyền,. . .
. . . . .
K: Khác, (chưa rõ)

Kế đến là trang thái của vật liệu, như bột, lõng, khí, sợi, kim loại (đen, màu), thủy tinh hay vô định hình, . . .

Tất nhiên với mỗi CQ cũ thể thì các kí tự đại diện này càng cụ thể càng tốt,
Theo mình mường tượng thì độ dài của mã HH là như nhau & không nên vượt 7 (Còn con 7 tại sao được chọn thì bạn tự suy luận, . . . )
Xin chào & chúc vui!
 
Upvote 0
Mình không rõ việc lập chỉ mục, mong bạn nói rõ hơn được không bạn?
Bài đã được tự động gộp:

Mình cũng xin lỗi các bạn, hình như các bạn chưa hiểu ý trọng tâm của mình cho lắm, vấn đề mình gặp phải là load dữ liệu vào listbox quá chậm, mình cần giải pháp làm sao để load nhanh hơn.mình có nghe nói có cách sử dụng DIC để giải quyết mà không biết về DIC
Trường hợp nầy không nên dùng Dic
Mã:
Private Sub txtMaHang_Change()
    Dim Arr(), Res(), i As Long, k As Long
    If txtMaHang = "" Then
        lstHH.Visible = False
    Else
        m = Sheets("DanhMucHH").Range("A65536").End(xlUp).Row
        Arr = Sheets("DanhMucHH").Range("A3:" & "B" & m).Value
        ReDim Res(1 To UBound(Arr), 1 To UBound(Arr, 2))
        For i = 1 To UBound(Arr)
            If UCase(Arr(i, 1)) Like "*" & UCase(txtMaHang) & "*" _
                Or UCase(Arr(i, 2)) Like "*" & UCase(txtMaHang) & "*" Then
                k = k + 1
                Res(k, 1) = Arr(i, 1)
                Res(k, 2) = Arr(i, 2)
            End If
        Next
        With lstHH
            .List = Res
            .Width = 250
            .Top = ActiveCell.Offset(1).Top
            .Left = ActiveCell.Offset(0, 1).Left
            .Height = 150
            If .Visible = False Then .Visible = True
        End With
    End If
End Sub
Muốn nhanh hơn cũng được, nhưng phải hy sinh cái khác
 
Upvote 0
Mình không rõ việc lập chỉ mục, mong bạn nói rõ hơn được không bạn?
Bài đã được tự động gộp:

Mình cũng xin lỗi các bạn, hình như các bạn chưa hiểu ý trọng tâm của mình cho lắm, vấn đề mình gặp phải là load dữ liệu vào listbox quá chậm, mình cần giải pháp làm sao để load nhanh hơn.mình có nghe nói có cách sử dụng DIC để giải quyết mà không biết về DIC
Index, chỉ mục từ khóa thì bạn tìm đọc nhé, kiểu như hỏi tại sao google tìm kiếm văn bản nhanh đó

Thôi tạm dùng file này đi, đọc kỹ code trước khi sử dụng
Đã hạn chế tối đa số dòng items của listbox là 30 - bạn có thể hiệu chỉnh nó trên module
tại sao 30, vì đã gõ tìm kiếm nhanh thì đâu lại kéo listbox mấy khi

Đã sử dụng mảng (chỉ load mảng lại, khi đọc mở files, do đó nếu bên danh mục thay đổi thì tốt nhất save và khởi động lại file

đã nhanh 1 chút, còn tốt nhất thì chưa
 

File đính kèm

Upvote 0
Index, chỉ mục từ khóa thì bạn tìm đọc nhé, kiểu như hỏi tại sao google tìm kiếm văn bản nhanh đó

Thôi tạm dùng file này đi, đọc kỹ code trước khi sử dụng
Đã hạn chế tối đa số dòng items của listbox là 30 - bạn có thể hiệu chỉnh nó trên module
tại sao 30, vì đã gõ tìm kiếm nhanh thì đâu lại kéo listbox mấy khi

Đã sử dụng mảng (chỉ load mảng lại, khi đọc mở files, do đó nếu bên danh mục thay đổi thì tốt nhất save và khởi động lại file

đã nhanh 1 chút, còn tốt nhất thì chưa
Quá tuyệt vời là những gì tôi muốn nói, cảm ơn bạn rất nhiều, vấn đề được giải quyết. Chúc bạn sức khỏe và thành công
 
Upvote 0
Trường hợp nầy không nên dùng Dic
Mã:
Private Sub txtMaHang_Change()
    Dim Arr(), Res(), i As Long, k As Long
    If txtMaHang = "" Then
        lstHH.Visible = False
    Else
        m = Sheets("DanhMucHH").Range("A65536").End(xlUp).Row
        Arr = Sheets("DanhMucHH").Range("A3:" & "B" & m).Value
        ReDim Res(1 To UBound(Arr), 1 To UBound(Arr, 2))
        For i = 1 To UBound(Arr)
            If UCase(Arr(i, 1)) Like "*" & UCase(txtMaHang) & "*" _
                Or UCase(Arr(i, 2)) Like "*" & UCase(txtMaHang) & "*" Then
                k = k + 1
                Res(k, 1) = Arr(i, 1)
                Res(k, 2) = Arr(i, 2)
            End If
        Next
        With lstHH
            .List = Res
            .Width = 250
            .Top = ActiveCell.Offset(1).Top
            .Left = ActiveCell.Offset(0, 1).Left
            .Height = 150
            If .Visible = False Then .Visible = True
        End With
    End If
End Sub
Muốn nhanh hơn cũng được, nhưng phải hy sinh cái khác
Cái code của bạn cũng ok rất nhiều, mặc dù không nhanh như bạn tam888, tuy nhiên nghe bạn nói phải hy sinh thứ khác để nó có thể nhanh hơn, không biết ý bạn là phải bỏ thêm tiền bạc và công sức hay là sao vậy bạn, xin bạn chỉ giáo, chân thành cảm ơn bạn, cũng như tất cả các bạn khác đã dành thời gian giúp đỡ. xin chúc toàn thể các bạn sức khỏe và thành công.
 
Upvote 0
Web KT

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

Back
Top Bottom