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

Tôi xin nói rõ thêm là tôi muốn áp dụng file này để tra cứu phụ tùng. Tuy nhiên, danh sách phụ tùng của tôi có khoảng 150.000 dòng. Vậy tôi phải làm thế nào? Nếu tôi để danh sách ấy vào 03 sheet, vậy làm sao hiển thị trên Listbox?
 
Upvote 0
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?

Nhìn file thì tôi biết file của ai rồi, file lấy dữ liệu từ Sheet, mà sheet này thuộc Excel 2003, với phiên bản này số dòng lớn nhất là 65536 thôi, vì vậy muốn hơn nữa thì bạn chuyển thành file 2007 trở về sau sẽ được hơn 1 triệu dòng đó.

Bạn cứ chuyển đi rồi nhập dữ liệu hơn số 65536 dòng thử xem nó có hiện lên không nhé!

Bởi vì khi load form có câu lệnh:

Mã:
  With Sheet1.Range("A1").CurrentRegion
    sArray = Intersect(.Cells, .Offset(1)).Value
  End With

Nên bạn không cần phải sửa code đâu!
 
Upvote 0
Tôi xin nói rõ thêm là tôi muốn áp dụng file này để tra cứu phụ tùng. Tuy nhiên, danh sách phụ tùng của tôi có khoảng 150.000 dòng. Vậy tôi phải làm thế nào? Nếu tôi để danh sách ấy vào 03 sheet, vậy làm sao hiển thị trên Listbox?

Cũng nói thêm là nếu là bây giờ thì Thầy ndu96081631 sẽ cải tiến chạy nhanh hơn chục lần đấy!
 
Upvote 0
Cũng nói thêm là nếu là bây giờ thì Thầy ndu96081631 sẽ cải tiến chạy nhanh hơn chục lần đấy!
Rất cảm ơn bạn đã quan tâm. Tuy nhiên, khi tôi chuyển sang 2007, đóng file lại, mở file lên, mở Form thì bị báo lỗi. Còn khi để ở 2003, save as sang 2007 mà chưa đóng file lại thì chạy bình thường. Tôi thật sự chưa hiểu.
Bạn có thể cho một ví dụ của Thầy ndu96081631 được không?
Nói thật là tôi chưa rành VBA lắm. Tôi chỉ chỉnh sửa từ những code trên diễn đàn để tạo file theo nhu cầu thôi. Bạn có thể giải thích giùm mình câu lệnh sau được không.

With Sheet1.Range("A1").CurrentRegion
sArray = Intersect(.Cells, .Offset(1)).Value
End With

Xin cảm ơn rất nhiều.
 
Upvote 0
Tôi xin nói rõ thêm là tôi muốn áp dụng file này để tra cứu phụ tùng. Tuy nhiên, danh sách phụ tùng của tôi có khoảng 150.000 dòng. Vậy tôi phải làm thế nào? Nếu tôi để danh sách ấy vào 03 sheet, vậy làm sao hiển thị trên Listbox?
Khi người ta đưa dữ liệu vào listbox để tra cứu thì mục đích là lọc ra 1 list ngắn nhất liên quan đến những gì cần thôi. Mắt nào mà có thể tìm kiếm với hơn 100 000 dòng như thế. Tốt nhất là bạn gởi file mẫu lên và nói rõ yêu cầu, biết đâu sẽ có cách ngắn gọn hơn nhiều.
 
Upvote 0
Khi người ta đưa dữ liệu vào listbox để tra cứu thì mục đích là lọc ra 1 list ngắn nhất liên quan đến những gì cần thôi. Mắt nào mà có thể tìm kiếm với hơn 100 000 dòng như thế. Tốt nhất là bạn gởi file mẫu lên và nói rõ yêu cầu, biết đâu sẽ có cách ngắn gọn hơn nhiều.
Yêu cầu của mình cũng giống như file mình đã đính kèm. Tuy nhiên dữ liệu bảng giá phụ tùng của mình có khoảng 150 000 dòng. Dĩ nhiên mình cũng muốn lọc ra 1 list ngắn, nhưng đằng nào cũng là lọc từ dữ liệu lớn mà.
 
Upvote 0
Đây là file dữ liệu và yêu cầu của mình nè:http://www.mediafire.com/?o4s2apy5ae1961s
Nó cũng giống như mục đích của các file mà mình đã tải từ GPE và đính kèm thôi, chỉ có dữ liệu và thứ tự cột cần lấy là khác thôi. Nhưng đó cũng là thách thức lớn cho dân a-ma-tơ như mình.
Mình thấy Listview nhìn đẹp và chuyên nghiệp hơn, các bạn có thể giúp mình theo hướng đó không?
 
Upvote 0
Đây là file dữ liệu và yêu cầu của mình nè:http://www.mediafire.com/?o4s2apy5ae1961s
Nó cũng giống như mục đích của các file mà mình đã tải từ GPE và đính kèm thôi, chỉ có dữ liệu và thứ tự cột cần lấy là khác thôi. Nhưng đó cũng là thách thức lớn cho dân a-ma-tơ như mình.
Mình thấy Listview nhìn đẹp và chuyên nghiệp hơn, các bạn có thể giúp mình theo hướng đó không?

Tôi vửa thí nghiệm gộp 3 bảng giá vào làm một, tổng số dòng lên đến 150,000 dòng thì thấy code chạy rất chậm, e rằng đây không phải là giải pháp tốt
Không biết nếu dùng ADO để lọc thì có cải thiện tốc độ không? Nhờ Hai Lúa test thử nhé
 
Upvote 0
Rất cám ơn các anh chị trên diễn đàn đã quan tâm. Tôi đang rất hồi hộp chờ đợi xem giải pháp nào hiệu quả đây. Mong các cao thủ nhín chút thời gian để giải quyết cho những dữ liệu "khủng" như của tôi.
 
Upvote 0
Rất cám ơn các anh chị trên diễn đàn đã quan tâm. Tôi đang rất hồi hộp chờ đợi xem giải pháp nào hiệu quả đây. Mong các cao thủ nhín chút thời gian để giải quyết cho những dữ liệu "khủng" như của tôi.

Trong thời gian chờ đợi, hỏi thêm bạn cái: trong sheet BangGia, bạn cần lọc cụ thể là cột nào?
 
Upvote 0
Dạ chào anh ndu96081631,
Em thường lọc cột SỐ PHỤ TÙNG và thêm các điều kiện Begins with, Contain, Ends with. Nhưng nếu anh cho lọc thêm cột TÊN PHỤ TÙNG nữa thì tốt quá.
 
Upvote 0
Dạ chào anh ndu96081631,
Em thường lọc cột SỐ PHỤ TÙNG và thêm các điều kiện Begins with, Contain, Ends with. Nhưng nếu anh cho lọc thêm cột TÊN PHỤ TÙNG nữa thì tốt quá.

Chào bạn!
Với yêu cầu chỉ lọc 2 cột như vậy, tôi thay đổi code, lọc bằng Advanced Filter, nhận thấy tốc độ rất nhanh
Bạn tải file về kiểm tra nhé (bấm nút Show Form, gõ từ khóa vào 2 TextBox rồi bấm nút Search)
Riêng về phần Begins with, Contain, Ends with tôi đã bỏ bớt mà thay vào đó bằng cách ký tự đại diện khi gõ trên TextBox. Ví dụ:
- Bạn muốn tìm SỐ PHỤ TÙNG có số đuôi là 4 và TÊN PHỤ TÙNG có từ bắt đầu là Ball
- Vậy bạn sẽ gõ vào TextBox bên trái: *4 và gõ vào TextBox bên phải: Ball* (như hình)

Untitled.jpg


- Bấm nút Search và kiểm tra kết quả xem có chính xác không?
- Tôi chỉ mới làm phần dò tìm, còn việc gán xuống sheet thì phải chờ bạn test xong, nếu OK tôi sẽ làm tiếp
---------------
Tải file tại đây: http://www.mediafire.com/?4u5gcsu9ncvsx7x
 
Upvote 0
Thật tuyệt vời ! Đây chính là cái mình cần và đã tìm hiểu rất lâu nhưng chưa làm được. Rất cảm ơn anh ndu9608163. Mình không ngờ lại được giúp đỡ nhanh đến vậy. Mong anh giúp tiếp phần gán dữ liệu xuống sheet. Em đã test thử, file rất OK.
 
Upvote 0
Thật tuyệt vời ! Đây chính là cái mình cần và đã tìm hiểu rất lâu nhưng chưa làm được. Rất cảm ơn anh ndu9608163. Mình không ngờ lại được giúp đỡ nhanh đến vậy. Mong anh giúp tiếp phần gán dữ liệu xuống sheet. Em đã test thử, file rất OK.

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 SL và Thà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)
 
Upvote 0
Tôi vửa thí nghiệm gộp 3 bảng giá vào làm một, tổng số dòng lên đến 150,000 dòng thì thấy code chạy rất chậm, e rằng đây không phải là giải pháp tốt
Không biết nếu dùng ADO để lọc thì có cải thiện tốc độ không? Nhờ Hai Lúa test thử nhé
Nếu nạp hết 1 lần vào listbox của hơn 150,000 dòng dữ liệu bằng ADO ở excel 2003 thì mất hết 8.299 giây Thầy à.
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Ẹc... Ẹc... thế thì vẫn thua Advanced Filter: Lọc ra 1 vùng phụ rồi nạp lên listbox vẫn ra kết quả trong nháy mắt

Ý em là nạp hết dữ liệu 150,000 dòng vào listbox 1 lần chứ không phải lọc. Test kỹ lại thì mất 8.299 giây cho hơn 150,000 dòng.
 
Upvote 0
Ý em là nạp hết dữ liệu 150,000 dòng vào listbox 1 lần chứ không phải lọc. Test kỹ lại thì mất 8.299 giây cho hơn 150,000 dòng.

Nếu không lọc gì cả thì cần gì phải ADO hay Advanced Filter, đúng không? Cứ cho toàn bộ vùng ấy lên ListBox là được rồi
Hai Lúa test thử xem lọc 2 điều kiện xem ADO mất bao nhiêu thời gian
 
Upvote 0
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
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á).

Vậy tôi tách bảng giá ra riêng
Tải file mới tại đây: http://www.mediafire.com/?8bm5qixuywczav3
Cách dùng vẫn như cũ.
Khi bạn mở file JOBCARD.xlsm lên thì lập tức dữ liệu từ bảng giá (file PriceList.xlsx) sẽ được nạp vào 1 sheet phụ (dùng ADO code)... Từ bây giờ, mọi thao tác lọc dữ liệu trên form sẽ được lấy từ sheet tạm này
Sau khi đóng file, sheet tạm sẽ tự động xóa
(lúc đầu mở file hơi lâu chút vì phải chờ dữ liệu cập nhật)
Test thử rồi thông báo cho tôi biết nhé
 
Upvote 0
Em đã Test thử, rất OK. Chỉ có một vấn đề nhỏ là khi em mở Form lên thì lại mất cột Số phụ tùng trong ListBox.

untitled_640x314.jpg

Nhưng khi lọc thì Số phụ tùng lại hiện ra và điều này không làm ảnh hưởng đến việc gán dữ liệu xuống sheet.
Tìm hiểu nãy giờ thì ra là ta không chép cột STT khi chép dữ liệu qua sheet tạm. Em đã thử sửa lại code như sau và thấy tạm ổn:

----------------------------
Sub Auto_Open()
Dim wksTmp As Worksheet, wkb As Workbook, Target As Range
Dim FileName As String, SheetName As String, RangeAddress As String
On Error GoTo ExitSub
Set wkb = ThisWorkbook
sTmpName = "Temporary"
If WksExist(sTmpName) = False Then
With wkb
.Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = sTmpName
End With
End If
Set wksTmp = wkb.Sheets(sTmpName)
Set Target = wksTmp.Range("B1")
FileName = wkb.Path & "\PriceList.xlsx"
SheetName = "BangGia"
RangeAddress = "A1:G200000"
GetData FileName, SheetName, RangeAddress, Target, True, True
wksTmp.Range("S1:T1").Value = wksTmp.Range("B1:C1").Value
wksTmp.Visible = xlSheetVeryHidden
MsgBox "Du lieu da cap nhat!"
Exit Sub
ExitSub:
MsgBox "Cap nhat bang gía that bai"
End Sub

---------------------------------------
Rất cảm ơn anh ndu96081631 đã nhiệt tình giúp đỡ.
 

File đính kèm

  • untitled_320x157.jpg
    untitled_320x157.jpg
    14.9 KB · Đọc: 107
Lần chỉnh sửa cuối:
Upvote 0
Em đã Test thử, rất OK. Chỉ có một vấn đề nhỏ là khi em mở Form lên thì lại mất cột Số phụ tùng trong ListBox.



Nhưng khi lọc thì Số phụ tùng lại hiện ra và điều này không làm ảnh hưởng đến việc gán dữ liệu xuống sheet.
Tìm hiểu nãy giờ thì ra là ta không chép cột STT khi chép dữ liệu qua sheet tạm. Em đã thử sửa lại code như sau và thấy tạm ổn:
.

Không cần sửa gì nhiều đâu, chỉ là tôi test chưa kỹ
Trong sự kiện UserForm_Initialize có code: (ở gần cuối)
Set rRes = Intersect(rng, rng.Offset(1, 1))
Sửa thành vầy nhé:
Set rRes = Intersect(rng, rng.Offset(1))
Chỉ vậy thôi là đủ
 
Upvote 0
Hôm trước có đọc 01 vài ý kiến của anh ndu96081631 về một số lỗi ngớ ngẩn của Excel 2007. Em cũng thường gặp trường hợp như vậy, đang làm tự nhiên báo lỗi "Don't send" rồi đóng file mất tiêu. Không biết anh ndu96081631 đã tìm ra nguyên nhân chưa? Em cũng sợ dùng Excel 2007 lắm, em chỉ dùng nó đối với những file không có code thôi, còn đối với những file có code thì chỉ dùng 2003.
Anh có thể áp dụng bài này nếu dùng Excel 2003 không? Có nghĩa là chúng ta sẽ để Bảng giá ở 03 vùng (hoặc 03 sheet) khác nhau. Làm sao khi nạp Listbox sẽ hiển thị tổng hợp của 03 vùng này? Khi lọc sẽ lọc cùng lúc 03 vùng và kết quả là kết quả tổng hợp?
Rất mong anh ndu96081631 và các bạn cho ý kiến.
 
Upvote 0
Hôm trước có đọc 01 vài ý kiến của anh ndu96081631 về một số lỗi ngớ ngẩn của Excel 2007. Em cũng thường gặp trường hợp như vậy, đang làm tự nhiên báo lỗi "Don't send" rồi đóng file mất tiêu. Không biết anh ndu96081631 đã tìm ra nguyên nhân chưa? Em cũng sợ dùng Excel 2007 lắm, em chỉ dùng nó đối với những file không có code thôi, còn đối với những file có code thì chỉ dùng 2003.
Anh có thể áp dụng bài này nếu dùng Excel 2003 không? Có nghĩa là chúng ta sẽ để Bảng giá ở 03 vùng (hoặc 03 sheet) khác nhau. Làm sao khi nạp Listbox sẽ hiển thị tổng hợp của 03 vùng này? Khi lọc sẽ lọc cùng lúc 03 vùng và kết quả là kết quả tổng hợp?
Rất mong anh ndu96081631 và các bạn cho ý kiến.

Sao bác không dùng Excel2010, bây giờ mấy ai còn sài 2003 nữa đâu.
 
Upvote 0
Sao bác không dùng Excel2010, bây giờ mấy ai còn sài 2003 nữa đâu.
Mình đang dùng Excel 2007 đấy chứ. Tuy nhiên, mình thường lưu file dưới dạng .xls thôi và chưa từng bị lỗi "Don't send". Còn nếu lưu dưới dạng .xlsm thì thường hay bị lỗi lắm.
Còn chuyển sang 2010 thì nói thật mình chưa chuẩn bị cho việc này vì mình đã quen rồi.
 
Upvote 0
Mình đang dùng Excel 2007 đấy chứ. Tuy nhiên, mình thường lưu file dưới dạng .xls thôi và chưa từng bị lỗi "Don't send". Còn nếu lưu dưới dạng .xlsm thì thường hay bị lỗi lắm.
Còn chuyển sang 2010 thì nói thật mình chưa chuẩn bị cho việc này vì mình đã quen rồi.
Nếu bạn dùng Excel 2007 đã quen thì cứ yên tâm nâng cấp lên Excel 2010, vì giao diện chúng y chang nhau thôi
Vấn đề là Excel 2010 rất ít khi gặp lỗi tào lao như trên Excel 2007 (hồi trước tôi dùng Excel 2007 một thời gian, thấy ghét quá nên dẹp nó luôn rồi. Dùng Excel 2010 rất ổn định)
 
Upvote 0
Nếu bạn dùng Excel 2007 đã quen thì cứ yên tâm nâng cấp lên Excel 2010, vì giao diện chúng y chang nhau thôi
Vấn đề là Excel 2010 rất ít khi gặp lỗi tào lao như trên Excel 2007 (hồi trước tôi dùng Excel 2007 một thời gian, thấy ghét quá nên dẹp nó luôn rồi. Dùng Excel 2010 rất ổn định)
OK. Em sẽ cố gắng tìm hiểu và nâng cấp lên 2010. Em cũng được nhiều người khuyên lắm rồi, nhưng chưa thử. Nay anh ndu96081631 nói vậy là em yên tâm rồi.
 
Upvote 0
Vậy tôi tách bảng giá ra riêng
Tải file mới tại đây: http://www.mediafire.com/?8bm5qixuywczav3
Cách dùng vẫn như cũ.
Khi bạn mở file JOBCARD.xlsm lên thì lập tức dữ liệu từ bảng giá (file PriceList.xlsx) sẽ được nạp vào 1 sheet phụ (dùng ADO code)... Từ bây giờ, mọi thao tác lọc dữ liệu trên form sẽ được lấy từ sheet tạm này
Sau khi đóng file, sheet tạm sẽ tự động xóa
(lúc đầu mở file hơi lâu chút vì phải chờ dữ liệu cập nhật)
Test thử rồi thông báo cho tôi biết nhé
Nếu đã dùng ADO thì mình nên bỏ luôn sheet tạm này luôn đi Thầy.
 
Upvote 0
Nếu đã dùng ADO thì mình nên bỏ luôn sheet tạm này luôn đi Thầy.

Bởi vì code tôi dựa trên cơ sở Advanced Filter nên buộc phải có sheet tạm. ADO chẳng qua để lấy dữ liệu từ file đang đóng
Tôi cũng đang chở Hai Lúa viết 1 code dưới dạng tổng quát để lọc (giống như hàm Filter2DArray tôi đã viết). Tức giải quyết bài toán ở dạng tổng quát chứ không phải đi giải quyết từng bài toán cụ thể (mất công gặp bài khác lại phải sửa code)
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom