Listbox thể hiện trên 65536 dòng (1 người xem)

Liên hệ QC

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

NGUYENQUANGTHO

Thành viên mới
Tham gia
9/9/10
Bài viết
34
Được thích
33
Chào các bạn. Mình có một vấn đề mong các bạn giải thích như sau:
Tôi muốn Listbox hiển thị trên 65536 dòng thì phải làm sao?
Đây là ví dụ tôi tải trên GPE. Tôi muốn giá trị copy xuống bảng tính là cộ ID và Ngày thì phải thay đổi chỗ nào trong code?
 

File đính kèm

Hỏi lại cho chắc:
- Trong sheet YEUCAU, cột F (Đơn Giá) sẽ lấy đơn giá nào trong form? Giá đại lý hay Giá khách?
- Cột SLThành Tiền bạn tính sao đây? Sẽ nhập bằng tay trực tiếp trên sheet hay nhập trên Form?
Nếu có yêu cầu gì khác liên quan đên thiết kế form, bạn có thể tự mình thiết kế lấy rồi đưa lên đây nhé (nói chung là tôi không có năng khiếu về mấy vụ thiết kế này)
Trong cột F (Đơn Giá) em lấy Giá khách. Cột SL em sẽ nhập trực tiếp trên sheet. Cột Thành Tiền em sẽ dùng công thức trực tiếp trên sheet luôn.
Em thấy Form do anh thiết kế rất đẹp mà.
 
Upvote 0
Trong cột F (Đơn Giá) em lấy Giá khách. Cột SL em sẽ nhập trực tiếp trên sheet. Cột Thành Tiền em sẽ dùng công thức trực tiếp trên sheet luôn.
Em thấy Form do anh thiết kế rất đẹp mà.

Tôi đề xuất thế này:
- Trên form ta thiết kế thêm 1 TextBox để gõ SL
- Sau khi lọc xong, bạn double click vào dòng nào đó trên ListBox thì mọi thông tin, kế cả SL vừa nhập sẽ được gán xuống sheet
- Thành tiền sẽ được tự động tính luôn
-----------------
Đã dùng code VBA, ai lại có công thức trong đó ---> nữa nạc, nữa mỡ thế không hay tí nào
 
Upvote 0
Hai Lua cho xem code nạp listbox bằng ADO với.
 
Upvote 0
Tôi đề xuất thế này:
- Trên form ta thiết kế thêm 1 TextBox để gõ SL
- Sau khi lọc xong, bạn double click vào dòng nào đó trên ListBox thì mọi thông tin, kế cả SL vừa nhập sẽ được gán xuống sheet
- Thành tiền sẽ được tự động tính luôn
-----------------
Đã dùng code VBA, ai lại có công thức trong đó ---> nữa nạc, nữa mỡ thế không hay tí nào
Nếu được thế thì còn gì bằng. Làm phiền anh thiết kế giúp em TextBox SL luôn.

Xin phép anh ndu96081631, em vừa thay đổi code chút xíu cho tiện. Thay vì dùng nút Search thì em dùng txtID_AfterUpdate()txtName_AfterUpdate. Mong anh và các bạn cho ý kiến có nên bỏ nút Search luôn không.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Hai Lua cho xem code nạp listbox bằng ADO với.

Em nạp bình thường thôi anh.
[GPECODE=sql]Private Sub txtSearch_Click()
Dim TG As Double, adoConn As Object, adoRS As Object
TG = Timer
Set adoConn = CreateObject("ADODB.Connection")
Set adoRS = CreateObject("ADODB.Recordset")
With adoConn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0;HDR=No;"";"
.Open
End With
With adoRS
.ActiveConnection = adoConn
.Open "select * from " & _
"(SELECT * FROM [BangGia1$A2:H60000] " & _
"Union ALL " & _
"SELECT * FROM [BangGia2$A2:H60000] " & _
"Union ALL " & _
"SELECT * FROM [BangGia3$A2:H60000])"
If Not (.bof And .EOF) Then
lstResult.ColumnCount = .fields.Count
lstResult.Column = .getrows()
MsgBox Timer - TG
End If
.Close
End With
Set adoRS = Nothing
adoConn.Close: Set adoConn = Nothing
End Sub

[/GPECODE]

Do dữ liệu nằm trên 3 sheet nên ta phải mất thời gian để gom nhóm nó lại, xong ta đưa nó vào list.

Với yêu cầu đề bài em đưa ý kiến thế này, chuyển toàn bộ dữ liệu đó sang 1 bảng access, dùng excel truy vấn vào bảng đó. Như vậy sẽ làm nhẹ file excel cũng như truy vấn sẽ tăng lên đáng kể.

Về tốc độ thì khi truy vấn đến file access và nạp toàn bộ dữ liệu vào list chỉ mất 2 giây. Nếu thêm 2 điều kiện lọc thì chỉ mất 0.373... giây.
36.jpg

http://www.4shared.com/rar/Ll47Goq3/NapListBox.html
 
Upvote 0
Với yêu cầu đề bài em đưa ý kiến thế này, chuyển toàn bộ dữ liệu đó sang 1 bảng access, dùng excel truy vấn vào bảng đó. Như vậy sẽ làm nhẹ file excel cũng như truy vấn sẽ tăng lên đáng kể.

Về tốc độ thì khi truy vấn đến file access và nạp toàn bộ dữ liệu vào list chỉ mất 2 giây. Nếu thêm 2 điều kiện lọc thì chỉ mất 0.373... giây.
Bạn có thể hướng dẫn mình cách này được không?
 
Upvote 0
Bạn có thể hướng dẫn mình cách này được không?

Bạn dùng code sau để kết nối với file access, lưu ý file access tôi đặt tên là DataBase.mdb và đặt nằm chung folder với file chạy. Tất cả dữ liệu của Excel tôi đã chuyển về 1 bảng tblGiaTong trong Access và đã bỏ tiếng Việt có dấu cho tên cột đi.

Code sẽ như sau:

[GPECODE=sql]Private Sub txtSearch_Click()
Dim nT As Double, cnn As Object, rst As Object, lsSQL As String
nT = Timer
Set cnn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
With cnn
.Provider = "Microsoft Jet 4.0 OLE DB Provider"
.ConnectionString = "Data Source=" & ThisWorkbook.Path & "\DataBase.mdb"
.Open
End With
lsSQL = "SELECT * " & _
"FROM tblGiaTong " & _
"WHERE (((tblGiaTong.SOPHUTUNG) Like '%" & txtID & "%') AND ((tblGiaTong.TENPHUTUNG) Like '%" & txtName & "%'));"
With rst
.ActiveConnection = cnn
.Open lsSQL
If Not (.bof And .EOF) Then
lstResult.ColumnCount = .fields.Count
lstResult.Column = .getrows()
MsgBox Timer - nT
End If
.Close
End With

Set rst = Nothing
cnn.Close: Set cnn = Nothing
End Sub

[/GPECODE]

Bạn tải file rồi giải nén, xong mở file excel thử nhé.
 

File đính kèm

Upvote 0
Nếu được thế thì còn gì bằng. Làm phiền anh thiết kế giúp em TextBox SL luôn.
Bạn tải file theo link này nhé: http://www.mediafire.com/?112mi7hjr7har6p
Test thế nào báo tôi biết với

Xin phép anh ndu96081631, em vừa thay đổi code chút xíu cho tiện. Thay vì dùng nút Search thì em dùng txtID_AfterUpdate()txtName_AfterUpdate. Mong anh và các bạn cho ý kiến có nên bỏ nút Search luôn không.
Cái đó tùy ý bạn! Thích làm gì thì làm, miễn cảm thấy thuận tiện cho công việc là được rồi
-----------------------------
Với yêu cầu đề bài em đưa ý kiến thế này, chuyển toàn bộ dữ liệu đó sang 1 bảng access, dùng excel truy vấn vào bảng đó. Như vậy sẽ làm nhẹ file excel cũng như truy vấn sẽ tăng lên đáng kể.

Về tốc độ thì khi truy vấn đến file access và nạp toàn bộ dữ liệu vào list chỉ mất 2 giây. Nếu thêm 2 điều kiện lọc thì chỉ mất 0.373... giây.
Tôi dùng Advanced Filter, vẫn nhanh vèo vèo ---> Kết quả lọc gần như trong tích tắc (0.5s)
(Xem ra công cụ có sẵn của Excel không thể xem thường được)
Ẹc... Ẹc...
 
Upvote 0
Tôi dùng Advanced Filter, vẫn nhanh vèo vèo ---> Kết quả lọc gần như trong tích tắc (0.5s)
(Xem ra công cụ có sẵn của Excel không thể xem thường được)
Ẹc... Ẹc...

Chắc chắn rằng những công cụ sẳn có sẽ có tốc độ tuyệt hảo nhưng trong trường hợp này nó vẫn thua ado=> Phải tạo vùng phụ, không lọc được ở file khác khi file đang đóng, tốc độ cũng hình như không bằng ado.
 
Upvote 0
Chắc chắn rằng những công cụ sẳn có sẽ có tốc độ tuyệt hảo nhưng trong trường hợp này nó vẫn thua ado=> Phải tạo vùng phụ, không lọc được ở file khác khi file đang đóng, tốc độ cũng hình như không bằng ado.

Nếu ở file khác thì tôi sẽ dùng ADO lấy dữ liệu từ file đang đóng rồi cho vào 1 sheet tạm... Advanced Filter sẽ lọc từ dữ liệu tạm này (việc lấy dữ liệu sẽ cho tự động ngay khi mở file)
Lòng vòng thế thì tôi không biết dùng Access... Ẹc... Ẹc...
Không biết các bạn khác test thế nào chứ tôi chạy file của Hai Lúa thử thì thấy tốc độ thua Advanced Filter đó nha! Ngoài ra code của Hai Lúa chưa lọc được theo kiểu Begins With, Contains, End With ---> Không biết ADO có làm được vụ này không ta? Tức là nếu người ta gõ chữ *Pis* nghĩa là lọc Contains, gõ chữ Pis* nghĩa là lọc Begins With và gõ chữ *Pis nghĩa là lọc End With
 
Lần chỉnh sửa cuối:
Upvote 0
Xin chân thành cảm ơn các bạn, đặc biệt là anh ndu96081631. Em đã test thử, file rất OK, Form thiết kế rất pro và đáp ứng nhu cầu công việc của em. Đúng là Excel không thể xem thường được.
 
Upvote 0
Nếu ở file khác thì tôi sẽ dùng ADO lấy dữ liệu từ file đang đóng rồi cho vào 1 sheet tạm... Advanced Filter sẽ lọc từ dữ liệu tạm này (việc lấy dữ liệu sẽ cho tự động ngay khi mở file)
Lòng vòng thế thì tôi không biết dùng Access... Ẹc... Ẹc...
Không biết các bạn khác test thế nào chứ tôi chạy file của Hai Lúa thử thì thấy tốc độ thua Advanced Filter đó nha! Ngoài ra code của Hai Lúa chưa lọc được theo kiểu Begins With, Contains, End With ---> Không biết ADO có làm được vụ này không ta? Tức là nếu người ta gõ chữ *Pis* nghĩa là lọc Contains, gõ chữ Pis* nghĩa là lọc Begins With và gõ chữ *Pis nghĩa là lọc End With

Code trên em đã lọc theo trường hợp Thầy nói, đọc code Thầy sẽ thấy dấu phần trăm (%) dấu này trong ado sẽ tương tự như dấu sao (*) đó Thầy. Nếu muốn lọc như Thầy thì chỉnh lại xíu là được.
 
Upvote 0
Xin chân thành cảm ơn các bạn, đặc biệt là anh ndu96081631. Em đã test thử, file rất OK, Form thiết kế rất pro và đáp ứng nhu cầu công việc của em. Đúng là Excel không thể xem thường được.

Bạn lưu ý cho vì trong form tôi có dùng 1 số hiệu ứng:
- Khi form mở, nếu dùng chuột chọn 1 cell trên sheet thì form sẽ mờ đi, mục đích để ta nhìn thấy những gì nằm dưới form
- Khi form đang mờ, nếu ta dùng chuột chọn vào tiêu đề form hoặc listbox thì form sẽ trờ lại bình thường
- Lưu ý thêm: Nếu bạn đổi tên sheet thì phải đổi luôn trong code nhé
 
Upvote 0
Nếu ở file khác thì tôi sẽ dùng ADO lấy dữ liệu từ file đang đóng rồi cho vào 1 sheet tạm... Advanced Filter sẽ lọc từ dữ liệu tạm này (việc lấy dữ liệu sẽ cho tự động ngay khi mở file)
Lòng vòng thế thì tôi không biết dùng Access... Ẹc... Ẹc...
Không biết các bạn khác test thế nào chứ tôi chạy file của Hai Lúa thử thì thấy tốc độ thua Advanced Filter đó nha! Ngoài ra code của Hai Lúa chưa lọc được theo kiểu Begins With, Contains, End With ---> Không biết ADO có làm được vụ này không ta? Tức là nếu người ta gõ chữ *Pis* nghĩa là lọc Contains, gõ chữ Pis* nghĩa là lọc Begins With và gõ chữ *Pis nghĩa là lọc End With
Đúng như anh ndu96081631 nói. Em đã thử và thấy cách của anh ndu96081631 nhanh hơn, dễ hiểu và dễ làm hơn so với dùng ADO (có lẽ do em cũng chưa biết nhiều về Access).
 
Upvote 0
Bạn lưu ý cho vì trong form tôi có dùng 1 số hiệu ứng:
- Khi form mở, nếu dùng chuột chọn 1 cell trên sheet thì form sẽ mờ đi, mục đích để ta nhìn thấy những gì nằm dưới form
- Khi form đang mờ, nếu ta dùng chuột chọn vào tiêu đề form hoặc listbox thì form sẽ trờ lại bình thường
- Lưu ý thêm: Nếu bạn đổi tên sheet thì phải đổi luôn trong code nhé
Em đã thử hiệu ứng của anh rồi, vì thế em mới nói là rất pro và phù hợp công việc của em. Cảm ơn anh rất nhiều.
 
Upvote 0
Nếu muốn lọc như Thầy thì chỉnh lại xíu là được.
Làm luôn đi cho mình học hỏi với. Tức giao phần tùy chọn cho người dùng quyết định (Begins, Contain hay End là do mấy dấu * trên TextBox)
Ngoài ra, không biết ADO có lọc được ký tự đại diện khác không ta? Chẳng hạn là dấu ? (đại diện cho 1 ký tự)
 
Upvote 0
Làm luôn đi cho mình học hỏi với. Tức giao phần tùy chọn cho người dùng quyết định (Begins, Contain hay End là do mấy dấu * trên TextBox)
Ngoài ra, không biết ADO có lọc được ký tự đại diện khác không ta? Chẳng hạn là dấu ? (đại diện cho 1 ký tự)
Đúng rồi, em cũng đang rất muốn học hỏi thêm ADO cho trường hợp này đây. Từ ngày biết đến GPE, công việc của em được cải thiện rất nhiều.
 
Upvote 0
Đúng rồi, em cũng đang rất muốn học hỏi thêm ADO cho trường hợp này đây. Từ ngày biết đến GPE, công việc của em được cải thiện rất nhiều.

Nếu muốn học ADO thì vào đây:
http://www.giaiphapexcel.com/forum/showthread.php?75143-Bài-tập-về-ADO-căn-bản
Chỉ là tôi đang thắc mắc 1 chuyện: Đằng nào cũng cho Data Base vào 1 file khác, vậy tại sao bắt buộc phải là Access? Tôi thấy cho vào 1 file Excel khác cũng đâu có vấn đề gì chứ


 
Upvote 0
Nếu muốn học ADO thì vào đây:
http://www.giaiphapexcel.com/forum/showthread.php?75143-B%C3%A0i-t%E1%BA%ADp-v%E1%BB%81-ADO-c%C4%83n-b%E1%BA%A3n
Chỉ là tôi đang thắc mắc 1 chuyện: Đằng nào cũng cho Data Base vào 1 file khác, vậy tại sao bắt buộc phải là Access? Tôi thấy cho vào 1 file Excel khác cũng đâu có vấn đề gì chứ


Vậy anh có thể giúp em cho trường hợp này luôn được không? Có nghĩa là Bảng giá sẽ lưu riêng 01 file, Dữ liệu báo giá sẽ là file khác. Khi mở file Dữ liệu báo giá lên thì nó sẽ tự động lấy dữ liệu ở file Bảng giá. Sau khi sử dụng xong thì nó sẽ xóa dữ liệu của Bảng giá (đã lấy từ file Bảng giá). (Mục dích là làm giảm dung lượng của file Dữ liệu báo giá).
 
Upvote 0
Nếu muốn học ADO thì vào đây:
http://www.giaiphapexcel.com/forum/showthread.php?75143-B%C3%A0i-t%E1%BA%ADp-v%E1%BB%81-ADO-c%C4%83n-b%E1%BA%A3n
Chỉ là tôi đang thắc mắc 1 chuyện: Đằng nào cũng cho Data Base vào 1 file khác, vậy tại sao bắt buộc phải là Access? Tôi thấy cho vào 1 file Excel khác cũng đâu có vấn đề gì chứ



Đưa vào Access sẽ ghi dữ liệu được nhiều hơn lên đến 2gigabyte, truy vấn sẽ nhanh hơn, xóa dòng và các câu lệnh khác mà excel ado không hổ trợ.
 
Upvote 0
Web KT

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

Back
Top Bottom