Lỗi VBA Filter dữ liệu ?

Liên hệ QC

thanhphuongvip

Mới học VBA, hỏi ngu anh chị đừng chửi ạ
Tham gia
16/1/10
Bài viết
136
Được thích
22
Xin chào anh em, mình có làm một code để filter nhanh dữ liệu như sau:

216672


Nhập ký tự vào để nó Filter:

216673


Nhưng sau khi Xóa ký tự lọc đi thì nó ko showall Data mà nó vẫn còn ẩn một vài vòng, khi mình vào Data -> Clear thì nó mới hết.

216674

Anh em cho mình hỏi phải thêm code gì vào để khi mình bấm delete từ khóa thì nó showall data như khi chọn Clear trong menu DATA. Chứ trong trường hợp trên thì ko đc. Code mình viết như sau (Đặt vào sheet), trong đó bảng tính đặt namerange là nhapxuaton, DIeukien1 là vùng $O$7:$O$8 có chưa một công thức seach để làm điều kiện lọc.

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub

If Target.Address = "$C$8" Then
  Range("nhapxuatton").AdvancedFilter _
    Action:=xlFilterInPlace, _
      CriteriaRange:=Range("Dieukien1"), Unique:=False
End If


End Sub

Cảm ơn mọi người!
 

File đính kèm

  • VBA Nhap Xuat Ton Rut Trich.xlsm
    252.3 KB · Đọc: 6
Xin chào anh em, mình có làm một code để filter nhanh dữ liệu như sau:

View attachment 216672


Nhập ký tự vào để nó Filter:

View attachment 216673


Nhưng sau khi Xóa ký tự lọc đi thì nó ko showall Data mà nó vẫn còn ẩn một vài vòng, khi mình vào Data -> Clear thì nó mới hết.

View attachment 216674

Anh em cho mình hỏi phải thêm code gì vào để khi mình bấm delete từ khóa thì nó showall data như khi chọn Clear trong menu DATA. Chứ trong trường hợp trên thì ko đc. Code mình viết như sau (Đặt vào sheet), trong đó bảng tính đặt namerange là nhapxuaton, DIeukien1 là vùng $O$7:$O$8 có chưa một công thức seach để làm điều kiện lọc.

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub

If Target.Address = "$C$8" Then
  Range("nhapxuatton").AdvancedFilter _
    Action:=xlFilterInPlace, _
      CriteriaRange:=Range("Dieukien1"), Unique:=False
End If


End Sub

Cảm ơn mọi người!
Do bạn đặt Name dư số dòng.
NhapXuatTon =OFFSET(NhapXuatTon!$C$9,0,0,COUNTA(NhapXuatTon!$C$9:$C$65535),5)
 
Upvote 0
Upvote 0
Upvote 0

File đính kèm

  • VBA Nhap Xuat Ton Rut Trich.xlsm
    172.5 KB · Đọc: 11
Upvote 0
Thao tác:
1. Sửa Name NhapXuatTon như trên.
2. ShowAll
3. Unhide: chọn dòng 10:30 Unhide (dòng nào đó bạn đã Hide).
4. Thử chạy code.
Vẫn ko chạy được bạn ạ :(
Bài đã được tự động gộp:

Bạn thử với file này xem sao:
Cảm ơn bạn, file chạy ngon lành! Tuy nhiên vì để cho tiện mình dựa vào code của bạn và biến đổi thành code của mình để dán luôn vào worksheet như sau và thấy chạy khá ổn:

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False

If Target.Count > 1 Then Exit Sub

If Target.Address = "$C$8" Then
    Range("o8") = "=SEARCH($C$8,C10)"

  Range("nhapxuatton").AdvancedFilter _
    Action:=xlFilterInPlace, _
      CriteriaRange:=Range("O7:O8"), Unique:=False
      Range("o7:o8").ClearContents
End If

If ActiveSheet.FilterMode = True And Range("C8") = "" Then
ActiveSheet.ShowAllData
Rows("10:65000").EntireRow.Hidden = False

End If

Application.ScreenUpdating = True
End Sub

Trong đó mình copy ý tưởng của bạn trong 2 ý, đó là gán vùng điều kiện vào ô nào đó, chạy code, sau đó vùng điều kiện đi để khỏi rắc rối bảng tính.

THứ 2 nữa là copy dòng If ActiveSheet.FilterMode = True.

Không biết mình làm code như trên thì liệu có bất cập nào ko nhỉ?
 
Upvote 0
Vẫn ko chạy được bạn ạ :(
Bài đã được tự động gộp:


Cảm ơn bạn, file chạy ngon lành! Tuy nhiên vì để cho tiện mình dựa vào code của bạn và biến đổi thành code của mình để dán luôn vào worksheet như sau và thấy chạy khá ổn:

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False

If Target.Count > 1 Then Exit Sub

If Target.Address = "$C$8" Then
    Range("o8") = "=SEARCH($C$8,C10)"

  Range("nhapxuatton").AdvancedFilter _
    Action:=xlFilterInPlace, _
      CriteriaRange:=Range("O7:O8"), Unique:=False
      Range("o7:o8").ClearContents
End If

If ActiveSheet.FilterMode = True And Range("C8") = "" Then
ActiveSheet.ShowAllData
Rows("10:65000").EntireRow.Hidden = False

End If

Application.ScreenUpdating = True
End Sub

Trong đó mình copy ý tưởng của bạn trong 2 ý, đó là gán vùng điều kiện vào ô nào đó, chạy code, sau đó vùng điều kiện đi để khỏi rắc rối bảng tính.

THứ 2 nữa là copy dòng If ActiveSheet.FilterMode = True.

Không biết mình làm code như trên thì liệu có bất cập nào ko nhỉ?
Bất cập hay không chỉ khi được chứng minh qua dữ liệu thật. Khi đó bạn mới thấy sửa chữa Sub "rắc rối" thế nào.
 
Upvote 0
Web KT
Back
Top Bottom