Lổi Filter listbox từ Textbox

  • Thread starter Thread starter jay156
  • Ngày gửi Ngày gửi
Liên hệ QC

jay156

Thành viên mới
Tham gia
11/5/09
Bài viết
13
Được thích
0
Em có đoạn code dưới đây, không biết sao đang chạy bình thường tự dưng lại lổi khi filter. Hơn nữa, co vài lúc điều chỉnh lại thì khi đánh vào Textbox để tìm dữ liệu, nếu đánh vào các dữ liệu mà không có trong list thì cũng bị lỗi, anh chị hướng dẫn dùm.

Private Sub TextBox1_Change()
Dim Clls As Range, Temp As Variant, i As Long
Application.ScreenUpdating = False
ListBox1.RowSource = ""
' If Len(Trim(TextBox1.Value)) = 0 Then Exit Sub
With Sheet1.Range(Sheet1.[A1], Sheet1.[b1118].End(xlUp))
Temp = .Value
.Sort .Cells(2, FCol), 1, Header:=xlGuess
.AutoFilter FCol, TextBox1.Value & "*"
ListBox1.Clear
For Each Clls In .Offset(1).Resize(, 1).SpecialCells(12)
ListBox1.AddItem (Clls)
ListBox1.List(i, 1) = Clls(, 2)
ListBox1.List(i, 2) = Clls(, 3)
i = i + 1
Next
.AutoFilter
.Value = Temp
End With
Application.ScreenUpdating = True
End Sub
 
1/Bạn sai ở đây:
ListBox1.List(i, 1) = Clls(, 2)
ListBox1.List(i, 2) = Clls(, 3)
Sửa thành:

ListBox1.List(i, 1) = Clls.Offset(, 2)
ListBox1.List(i, 2) = Clls.Offset(, 3)

2/Khi không tìm thấy thì vùng lọc= Nothing vậy thì các câu lệnh sau bị lỗi
Thêm câu lệnh

Mã:
Private Sub TextBox1_Change()
  Dim Clls As Range, Temp As Variant, i As Long
  Application.ScreenUpdating = False
[COLOR=Red]On error goto thoat[/COLOR]
...............................................
  [COLOR=Red]Thoat:[/COLOR]
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Còn đây là đoạn code khi em điều chỉnh lại chỉ lấy cột A thồi (sheet1 em có 7 cột) thì khi đánh dữ liệu vào textbox mà không có tương tự trong cột A sheet1 thì bị lổi. Bị lổi chổ nào vậy anh chị?
Private Sub TextBox1_Change()
Dim Clls As Range, Temp As Variant, i As Long
Application.ScreenUpdating = False
ListBox1.RowSource = ""
' If Len(Trim(TextBox1.Value)) = 0 Then Exit Sub
With Sheet1.Range(Sheet1.[A1], Sheet1.[A1118].End(xlUp))
Temp = .Value
.Sort .Cells(2, FCol), 1, Header:=xlGuess
.AutoFilter FCol, TextBox1.Value & "*"
ListBox1.Clear
For Each Clls In .Offset(1).Resize(, 1).SpecialCells(12)
ListBox1.AddItem (Clls)
ListBox1.List(i, 1) = Clls(, 2)
ListBox1.List(i, 2) = Clls(, 3)
i = i + 1
Next
.AutoFilter
.Value = Temp
End With
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Cám ơn bác !! em điều chỉnh được rồi, không bị lổi nữa. Nhưng khi em đánh những dữ liệu không có trong cột A thì lại hiện các Tiêu đề ở sheet 1, đồng thời dữ liệu cột A đã bị Sort A-Z, làm cho các dữ liệu cột A và các Cột còn lại không tương ứng nữa.

1/Bạn sai ở đây:
ListBox1.List(i, 1) = Clls(, 2)
ListBox1.List(i, 2) = Clls(, 3)
Sửa thành:

ListBox1.List(i, 1) = Clls.Offset(, 2)
ListBox1.List(i, 2) = Clls.Offset(, 3)

2/Khi không tìm thấy thì vùng lọc= Nothing vậy thì các câu lệnh sau bị lỗi
Thêm câu lệnh

Mã:
Private Sub TextBox1_Change()
  Dim Clls As Range, Temp As Variant, i As Long
  Application.ScreenUpdating = False
[COLOR=Red]On error goto thoat[/COLOR]
...............................................
  [COLOR=Red]Thoat:[/COLOR]
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Lỗi ở chỗ này
For Each Clls In .Offset(1).Resize(, 1).SpecialCells(12)
Đoạn màu đỏ =Nothing (Không có gì) thì For Each Clls In cái lý gì?
 
Upvote 0
Lỗi ở chỗ này
For Each Clls In .Offset(1).Resize(, 1).SpecialCells(12)
Đoạn màu đỏ =Nothing (Không có gì) thì For Each Clls In cái lý gì?
File này em điều chỉnh lại từ file của anh Tuấn trong diễn đàn, không rõ nữa. Nếu vậy thì phải điều chỉnh như thế nào để tránh lổi sort data trong sheet1 vậy anh Sealand.
 

File đính kèm

Upvote 0
File này em điều chỉnh lại từ file của anh Tuấn trong diễn đàn, không rõ nữa. Nếu vậy thì phải điều chỉnh như thế nào để tránh lổi sort data trong sheet1 vậy anh Sealand.
Bạn đưa file mà bạn đã sửa lên đây mới biết sai chổ nào chứ ---> File gốc không lỗi, vậy chứng tỏ bạn đã chỉnh sai chổ nào đó thôi!
------------------
Lỗi ở chỗ này
For Each Clls In .Offset(1).Resize(, 1).SpecialCells(12)
Đoạn màu đỏ =Nothing (Không có gì) thì For Each Clls In cái lý gì?
Với file mc_request_03.xls thì bao giờ có chuyện Đoạn màu đỏ =Nothing đâu anh à ---> Vì Offset(1) nên nó luôn thừa ra 1 dòng
 
Upvote 0
Bạn đưa file mà bạn đã sửa lên đây mới biết sai chổ nào chứ ---> File gốc không lỗi, vậy chứng tỏ bạn đã chỉnh sai chổ nào đó thôi!
------------------

Với file mc_request_03.xls thì bao giờ có chuyện Đoạn màu đỏ =Nothing đâu anh à ---> Vì Offset(1) nên nó luôn thừa ra 1 dòng
Đây là file của em, bác xem dùm nhé. Với lại, bác xem thử sheet UpdatePrice, em muốn đưa thêm filter vô để lọc các dữ liệu, nhưng bị lổi hoài nên bỏ ra, bác có cách nào không.

http://www.mediafire.com/?qalgaq1rqr28bxs
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Cụ thê bạn muốn làm gì? Và hiện đang gặp phải lỗi gì? Nói rõ chút đi ---> Càng rõ ràng càng tốt
ah, hiện tại trong sheet Request, mình bị lổi là khi điền thông tin vô textbox để lọc dữ liệu từ Listbox, nếu đánh các thông tin không đúng theo Code, thì dữ liệu ở sheet MC sẽ bị sort A-Z, như vậy các dữ liệu ở các cột khác ở sheet MC sẽ bị sai vì cột A đã bị Sort từ A-Z.

Điều thứ 2 là ở sheet UpdatePrice, mình muốn thêm filter listbox từ textbox (giống userform 1 ở sheet Request) để cho nhân viên khi update giá sẽ nhanh hơn khi tìm kiếm dữ liệu từ Listbox.

Bạn giúp dùm.
 
Upvote 0
ah, hiện tại trong sheet Request, mình bị lổi là khi điền thông tin vô textbox để lọc dữ liệu từ Listbox, nếu đánh các thông tin không đúng theo Code, thì dữ liệu ở sheet MC sẽ bị sort A-Z, như vậy các dữ liệu ở các cột khác ở sheet MC sẽ bị sai vì cột A đã bị Sort từ A-Z.

Điều thứ 2 là ở sheet UpdatePrice, mình muốn thêm filter listbox từ textbox (giống userform 1 ở sheet Request) để cho nhân viên khi update giá sẽ nhanh hơn khi tìm kiếm dữ liệu từ Listbox.

Bạn giúp dùm.
Nếu đã sort thì phải sort hết dữ liệu chứ, sao bạn chỉ sort từ cột A đến C làm chi
Ví dụ dữ liệu của bạn gồm 12 cột, vậy phải thay cái này:
With Sheet1.Range(Sheet1.[A2], Sheet1.[C65536].End(xlUp))
thành cái này
With Sheet1.Range(Sheet1.[A2], Sheet1.[A65536].End(xlUp)).Resize(, 12)
Như vậy thì sẽ chẳng có chuyện bị sai khi sort bao giờ --> Thử cái biết liền
---------------
Vấn đề thứ 2: Cứ từ từ mà nghiên cứu ---> Vì code đã viết rồi, cứ thế mà chuyển qua, trục trặc đến đâu xử lý đến nấy (đặc biệt đọc kỹ thông báo lỗi)
 
Upvote 0
Nếu đã sort thì phải sort hết dữ liệu chứ, sao bạn chỉ sort từ cột A đến C làm chi
Ví dụ dữ liệu của bạn gồm 12 cột, vậy phải thay cái này:
With Sheet1.Range(Sheet1.[A2], Sheet1.[C65536].End(xlUp))
thành cái này
With Sheet1.Range(Sheet1.[A2], Sheet1.[A65536].End(xlUp)).Resize(, 12)
Như vậy thì sẽ chẳng có chuyện bị sai khi sort bao giờ --> Thử cái biết liền
---------------
Vấn đề thứ 2: Cứ từ từ mà nghiên cứu ---> Vì code đã viết rồi, cứ thế mà chuyển qua, trục trặc đến đâu xử lý đến nấy (đặc biệt đọc kỹ thông báo lỗi)

Khi mình điều chỉnh như bạn thì sort tất cả các cột. Tuy nhiên, mình đang cố tránh trường hợp Khi nhân viên lọc dữ liệu, đánh sai code thì các rows ở sheet MC không bị Sort từ A-Z, sẽ khó cho nhân viên khác cập nhật thông tin thêm về các nguyên vật liệu mới.

Mình không chuyên về VBA nên chỉ biết sử dụng code các anh em trên diễn đàn chia sẽ.
 
Upvote 0
Khi mình điều chỉnh như bạn thì sort tất cả các cột. Tuy nhiên, mình đang cố tránh trường hợp Khi nhân viên lọc dữ liệu, đánh sai code thì các rows ở sheet MC không bị Sort từ A-Z, sẽ khó cho nhân viên khác cập nhật thông tin thêm về các nguyên vật liệu mới.

Mình không chuyên về VBA nên chỉ biết sử dụng code các anh em trên diễn đàn chia sẽ.
Làm gì có vụ này chứ ---> Dù bạn có gõ đúng hay sai thì sau khi gõ xong nó cũng trả mọi thứ về vị trí bạn đầu cơ mà
 
Upvote 0
Làm gì có vụ này chứ ---> Dù bạn có gõ đúng hay sai thì sau khi gõ xong nó cũng trả mọi thứ về vị trí bạn đầu cơ mà
Anh thử File này, Ban đầu ở Sheet MC, bắt đầu bằng Thép Tấm. Khi đánh sai vào textbox ở sheet Request (anh có thể mở userform lên rồi quay lại sheet MC rồi đánh vô textbox để filter) thì các cột A bị sắp xếp theo thứ tự từ A-Z.

http://www.mediafire.com/?s41sn66dbbx9dso
 
Upvote 0
Anh thử File này, Ban đầu ở Sheet MC, bắt đầu bằng Thép Tấm. Khi đánh sai vào textbox ở sheet Request (anh có thể mở userform lên rồi quay lại sheet MC rồi đánh vô textbox để filter) thì các cột A bị sắp xếp theo thứ tự từ A-Z.

http://www.mediafire.com/?s41sn66dbbx9dso
Nhờ các bạn khác test giúp ---> Tôi chẳng hề phát hiện giống như bạn vừa nói ---> Tức Sheet MC luôn luôn giữ nguyên vị trí, chẳng có sort A-->Z gì cả
 
Upvote 0
Nhờ các bạn khác test giúp ---> Tôi chẳng hề phát hiện giống như bạn vừa nói ---> Tức Sheet MC luôn luôn giữ nguyên vị trí, chẳng có sort A-->Z gì cả
Ok, mình làm xong rồi, chỉ cần bỏ lệnh sort trong cột và điều chỉnh range lại, thanks bạn.

Mình còn 1 bước cuối cùng là xong project thứ 1 cho công ty, Vi dụ mình có 1 ô textbox1 để filter listbox, sau khi filter xong, mình có 1 textbox thứ 2 để điền số liệu mới vào. Mình đã thành công tạo form điền thông tin vào cột D sheet MC từ Userform ở sheet Update Price (xin xem file đính kèm), tuy nhiên, khi Filter, ô đánh Giá vô không hiểu (vẫn hiểu như ô trước khi lọc ). Làm sao để sửa lổi này, các bạn hướng dẫn dùm để mình trình sếp nhé.
http://www.mediafire.com/?91k9k3aty85vzog
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom