Bật tăt (Toggle) Autofilter bằng 1 nút bấm

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

123

Thành viên mới
Tham gia
6/9/07
Bài viết
20
Được thích
1
Chào các bác
Em có một bảng tính trong đó đã thiết lập sẵn trạng thái Autofilter cho các cột của bảng . Em đã tạo 1 nút bấm để chạy một macro, đại ý là nếu như cột có ô hiện hành chưa được lọc thì sẽ tiến hành lọc autofilter cột này theo nội dung của ô hiện hành, còn nếu như cột đang được lọc rồi thì sẽ hiển thị toàn bộ nội dung của côt . Phần lọc theo nội dung của ô hiện hành em đã làm được rồi,
Mã:
Sub LOC_SELECTION()
'
Dim noi_dung As String
Dim so_cot As Integer
'lay noi dung cua o duoc chon
noi_dung = CStr(ActiveCell.Value)
'lay so thu tu cot cua o duoc chon
so_cot = ActiveCell.Column
'Kiem tra xem cot hien hanh da duoc loc chua?, neu chua loc thi tien hanh loc
If Selection.AutoFilterMode=False Then
'Loc theo noi dung cua o duoc chon
    Selection.AutoFilter Field:=so_cot, Criteria1:=noi_dung
'Neu loc roi thi cho hien thi lai toan bo du lieu cua cot (show all)
Else
Selection.AutoFilter Field:=so_cot

End If
End Sub
nhưng không biết kiểm tra tình trạng autofilter của cột như thế nào, lúc chạy toàn báo lỗi ở dòng đỏ bên trên, các bác xem giúp em nhé,
Xin cảm ơn các bác trước
 
Chỉnh sửa lần cuối bởi điều hành viên:
Trong câu lệnh: If Selection.AutoFilterMode=False Bạn thay Selection = ActiveSheet thử xem
 
Chào các bác
Em có một bảng tính trong đó đã thiết lập sẵn trạng thái Autofilter cho các cột của bảng . Em đã tạo 1 nút bấm để chạy một macro, đại ý là nếu như cột có ô hiện hành chưa được lọc thì sẽ tiến hành lọc autofilter cột này theo nội dung của ô hiện hành, còn nếu như cột đang được lọc rồi thì sẽ hiển thị toàn bộ nội dung của côt . Phần lọc theo nội dung của ô hiện hành em đã làm được rồi,

Sub LOC_SELECTION()
'

Dim noi_dung As String
Dim so_cot As Integer
'lay noi dung cua o duoc chon
noi_dung = CStr(ActiveCell.Value)
'lay so thu tu cot cua o duoc chon
so_cot = ActiveCell.Column
'Kiem tra xem cot hien hanh da duoc loc chua?, neu chua loc thi tien hanh loc
If Selection.AutoFilterMode=False Then
'Loc theo noi dung cua o duoc chon
Selection.AutoFilter Field:=so_cot, Criteria1:=noi_dung
'Neu loc roi thi cho hien thi lai toan bo du lieu cua cot (show all)
Else
Selection.AutoFilter Field:=so_cot

End If
End Sub


nhưng không biết kiểm tra tình trạng autofilter của cột như thế nào, lúc chạy toàn báo lỗi ở dòng đỏ bên trên, các bác xem giúp em nhé,
Xin cảm ơn các bác trước

Bạn xem ví dụ này, đặt con trỏ ở đâu --> Lọc theo cột và giá trị tại đó. Bạn chỉnh lại code cho phù hợp với dữ liệu!
PHP:
Sub LOC_SELECTION()
    Dim Rng As Range
    On Error Resume Next
    Set Rng = ActiveCell.CurrentRegion
    If ActiveSheet.AutoFilterMode = False Then
        Rng.AutoFilter ActiveCell.Column _
        - Rng.Cells(1, 1).Column + 1, ActiveCell.Value
    Else
        Rng.AutoFilter
    End If
End Sub
Xem File :
 

File đính kèm

Lần chỉnh sửa cuối:
Trong câu lệnh: If Selection.AutoFilterMode=False Bạn thay Selection = ActiveSheet thử xem

Híc, hồi nãy em trích dẫn nhầm bài của anh Trung Chinh, cái này em cũng vừa mới biết qua gợi ý của anh mà.

PHP:
ActiveSheet.AutoFilterMode
 
Lần chỉnh sửa cuối:
Chào các bác
Em có một bảng tính trong đó đã thiết lập sẵn trạng thái Autofilter cho các cột của bảng . Em đã tạo 1 nút bấm để chạy một macro, đại ý là nếu như cột có ô hiện hành chưa được lọc thì sẽ tiến hành lọc autofilter cột này theo nội dung của ô hiện hành, còn nếu như cột đang được lọc rồi thì sẽ hiển thị toàn bộ nội dung của côt . Phần lọc theo nội dung của ô hiện hành em đã làm được rồi,
Trong câu hỏi của bạn tôi quan tâm đến câu màu đỏ ---> Và nếu là thế thì chẳng cần đến AutoFilterMode, đúng không?
Tôi nghĩ chắc bạn muốn thế này:
PHP:
Sub Loc()
  Dim VtCot As Long
  On Error GoTo Thoat
  With ActiveSheet.AutoFilter
    If Not Intersect(.Range, ActiveCell) Is Nothing Then
      VtCot = ActiveCell.Column - .Range.Column + 1
      If .Filters(VtCot).On Then
        .Range.AutoFilter VtCot
      Else
        .Range.AutoFilter VtCot, ActiveCell
      End If
    End If
  End With
Thoat:
End Sub
 
Cam on thầy PTLong04x1: phẩn thầy hướng dẫn em khi bật thì lọc được nhưng khi bấm một lần nữa thì lại xóa mất trạng thái autofilter của em di nên hơi bất tiện một chut
Còn của thầy NDU thì hoạt động rất tốt, em sẽ dùng code của thầy .
Cám ơn các thầy đã giúp đỡ .
Kính,
 
Cam on thầy PTLong04x1: phẩn thầy hướng dẫn em khi bật thì lọc được nhưng khi bấm một lần nữa thì lại xóa mất trạng thái autofilter của em di nên hơi bất tiện một chut
Còn của thầy NDU thì hoạt động rất tốt, em sẽ dùng code của thầy .
Cám ơn các thầy đã giúp đỡ .
Kính,

Mình đoán và làm theo ý mình nên code cũng tương đối thôi, bạn dùng code của anh Ndu phục vụ được công việc là tốt rồi.

PS : chữ màu đỏ cứ dùng là "bạn" cho mình nha +-+-+-++-+-+-++-+-+-+ , chữ màu xanh thì giữ nguyên là ổn rồi --=0--=0--=0.
 
Web KT

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

Back
Top Bottom