Code Advanced Filter sai chổ nào mà không ra kết quả (1 người xem)

  • Thread starter Thread starter DMQ
  • Ngày gửi Ngày gửi

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

DMQ

Thành viên dốt
Tham gia
21/3/12
Bài viết
722
Được thích
57
Giới tính
Nam
Em có file sử dụng code Advanced Filter để lọc, nhưng bị sai chổ nào mà code chạy bị Debug(Em dang học hỏi về VBA). Mong các AC giúp đỡ!!!!!
 

File đính kèm

Em có file sử dụng code Advanced Filter để lọc, nhưng bị sai chổ nào mà code chạy bị Debug(Em dang học hỏi về VBA). Mong các AC giúp đỡ!!!!!
sửa dòng code cũ :
Mã:
Set Rng = [A3].CurrentRegion
thành
Mã:
Set Rng = [A1].CurrentRegion.Offset(1)
 
Upvote 0
Bạn sửa lại dòng lệnh này thành
PHP:
Set Rng = [A3].CurrentRegion.Offset(1)

Nhưng hai dòng lệnh gần cuối chưa thể làm việc.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Em có file sử dụng code Advanced Filter để lọc, nhưng bị sai chổ nào mà code chạy bị Debug(Em dang học hỏi về VBA). Mong các AC giúp đỡ!!!!!
Bạn thử thêm câu lệnh Rng.Select vào sau câu lệnh Set Rng = [A3].CurrentRegion là sẽ thấy nguyên nhân ngay à.
Hơn nữa, với dữ liệu trong file thì không thể lọc cho 2 yêu cầu cùng từ một vùng ban đầu là Rng được vì vùng Cân đối và vùng Nhập là khác biệt.

Với bài này, tôi sẽ sử dụng code như sau:
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$K$2" Or Target.Count > 1 Then Exit Sub
[A2:D10000].AdvancedFilter 2, [K1:K2], [K3:N3]
[F2:I10000].AdvancedFilter 2, [K1:K2], [P3:R3]
End Sub[/GPECODE]
Con số 10000 ở trên có thể thay bởi một số khác đủ lớn.
 
Upvote 0
Em có file sử dụng code Advanced Filter để lọc, nhưng bị sai chổ nào mà code chạy bị Debug(Em dang học hỏi về VBA). Mong các AC giúp đỡ!!!!!
Vùng lọc A2:D8 tiếp giáp với dòng A1:A4 (có chữ "Cân đối") nên advanced filter bị sai, bạn insert thêm ô trống A2:D2 rồi sửa lệnh thành Set Rng = [A4].CurrentRegion thì code advancedfilter sẽ chạy (mặc dù code của bạn còn lỗi nhưng không phải lỗi cú pháp).
 
Upvote 0
Oh!!!! Cám ơn Anh nghiaphuc nhiều nhe!!!!Code của Anh quá ngắn gọn.
 
Upvote 0
Cám Ơn các AC Mod đã sửa tiêu đề để rỏ ràng hơn . Câu chữ của em hơi khô khan.
 
Upvote 0
sao bây giờ em thêm một số loại dầu lửa nữa thì code lọc bị sai rồi các AC. Ví dụ như lọc "36H04" thì có cả "36H04PT" và "36H04DP" nữa là sao ????? Em gửi file đính kèm các AC xem dùm.
 

File đính kèm

Upvote 0
sao bây giờ em thêm một số loại dầu lửa nữa thì code lọc bị sai rồi các AC. Ví dụ như lọc "36H04" thì có cả "36H04PT" và "36H04DP" nữa là sao ????? Em gửi file đính kèm các AC xem dùm.
Bạn thử nhập điều kiện lọc là 36H04* xem sao
Tb. Xin lỗi, hiểu nhầm ý bạn, 1 yếu điểm của AF bạn ạ, nghiên cứu thêm cách lọc khác thôi
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ, em không rành về VBA. Nên các AC có thể giúp em luông được không ah!!!!Bài hỏi về"May I" và "May II" thì Anh Trọng Nghĩa có sử dụng biến "tam", còn bây giờ bài này em không biết ghép biến"tạm" vào chổ nào.
Code bài "May I","May II" :
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)   
If Not Intersect(Target, [G2:H2]) Is Nothing Then
   Application.EnableEvents = False
   Dim tam
   If Target.Column = 7 Then
      tam = Target
      Target.FormulaR1C1 = "=""=" & "" & "" & tam & """"
   End If
   [A4:E10000].AdvancedFilter 2, [G1:H2], [G4:K4]
   If Target.Column = 7 Then Target = tam
   Application.EnableEvents = True
 End If    
End Sub
Code của bài này:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)    
If Target.Address <> "$K$2" Or Target.Count > 1 Then Exit Sub
    [A2:D10000].AdvancedFilter 2, [K1:K2], [K3:N3]
    [F2:I10000].AdvancedFilter 2, [K1:K2], [P3:R3]
End Sub
Mong các AC giúp đỡ!!!!!!
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ, em không rành về VBA. Nên các AC có thể giúp em luông được không ah!!!!Bài hỏi về"May I" và "May II" thì Anh Trọng Nghĩa có sử dụng biến "tam", còn bây giờ bài này em không biết ghép biến"tạm" vào chổ nào.
Code bài "May I","May II" :
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)   
If Not Intersect(Target, [G2:H2]) Is Nothing Then
   Application.EnableEvents = False
   Dim tam
   If Target.Column = 7 Then
      tam = Target
      Target.FormulaR1C1 = "=""=" & "" & "" & tam & """"
   End If
   [A4:E10000].AdvancedFilter 2, [G1:H2], [G4:K4]
   If Target.Column = 7 Then Target = tam
   Application.EnableEvents = True
 End If    
End Sub
Code của bài này:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)    
If Target.Address <> "$K$2" Or Target.Count > 1 Then Exit Sub
    [A2:D10000].AdvancedFilter 2, [K1:K2], [K3:N3]
    [F2:I10000].AdvancedFilter 2, [K1:K2], [P3:R3]
End Sub
Mong các AC giúp đỡ!!!!!!

Muốn lọc chính xác phải bằng đúng từ bạn muốn lọc tức là ở ô K2 phải là vậy

'=36H04

Nên mởi có đoạn code này

"=""=" & "" & "" & tam & """"

Bạn tách ra từ từ sẽ hiểu
 
Upvote 0
Ngồi mầy mò, viết đoạn cốt này để thay thế cho AF của bạn, có 1 cảm giác hơi BẤT AN vì dù sao các phương thức sẵn có của excel vẫn là tối ưu (vừa ngắn vừa dễ hiểu). Up lên để bạn tham khảo, tham khảo để ứng dụng cho các bài khác,hị hị.
Còn cái đoạn bẫy lỗi ví dụ nhập Mã dầu lửa không phải chữ in hoa thì không lọc được. Mong các thành viên khác vào chỉ giáo thêm.
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [K2]) Is Nothing Then
Dim Source1(), Source2(), DauLua(), Ngay()
Dim i As Long, k As Long, x As Long, y As Long
Source1 = Range([A2], [D65000].End(3)).Value
Source2 = Range([F2], [I65000].End(3)).Value
ReDim DauLua(1 To UBound(Source1), 1 To 4)
ReDim Ngay(1 To UBound(Source1), 1 To 3)
For i = 1 To UBound(Source1)
If Source1(i, 1) = Target Then
k = k + 1
DauLua(k, 1) = Source1(i, 1)
DauLua(k, 2) = Source1(i, 2)
DauLua(k, 3) = Source1(i, 3)
DauLua(k, 4) = Source1(i, 4)
End If
Next
[K4].Resize(i - 1, 4) = DauLua
For x = 1 To UBound(Source2)
If Source2(x, 2) = Target Then
y = y + 1
Ngay(y, 1) = Source2(x, 1)
Ngay(y, 2) = Source2(x, 3)
Ngay(y, 3) = Source2(x, 4)
End If
Next
[P4].Resize(x - 1, 3) = Ngay
End If
End Sub[/GPECODE]
 
Upvote 0

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

Back
Top Bottom