Tô màu cho cell tiêu đề khi AutoFilter

Liên hệ QC

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,930
Tôi có vùng dử liệu E7:J30 đang dùng AutoFilter... Tôi muốn mỗi khi cột nào đó được Filter thì lập tức cell tiêu đề của cột đó đổi màu nền
Xin hỏi phải dùng code gì?
 

File đính kèm

  • FilterColor.xls
    20 KB · Đọc: 101
Lần chỉnh sửa cuối:
Đưa code sau vào sự kiện calculate của sheet, xem sao:
Mã:
Private Sub Worksheet_Calculate()
    Call SetColorField
End Sub
Private Sub SetColorField()
Dim rField As Range
On Error Resume Next
With Me.AutoFilter
    Set rField = .Range.Rows(1)
    If rField Is Nothing Then
    Exit Sub
    End If
    With .Filters
        For f = 1 To .Count
            With .Item(f)
                If .On Then
                    rField.Cells(1, f).Interior.ColorIndex = 6
                Else
                    rField.Cells(1, f).Interior.ColorIndex = 0
                End If
            End With
        Next
    End With
End With
Set rField = Nothing
End Sub
 
Upvote 0
Cãm ơn bạn!
Nhưng đưa vào sự kiện Worksheet_Calculate với mục đích khi sheet tính toán thì chạy code! Ở đây ta chỉ Filter, có gì để nó tính toán đâu?
 
Upvote 0
Sự kiện tự động tính lại khi thay đổi filter

Cãm ơn bạn!
Nhưng đưa vào sự kiện Worksheet_Calculate với mục đích khi sheet tính toán thì chạy code! Ở đây ta chỉ Filter, có gì để nó tính toán đâu?

Trong số các sự kiện của sheet, tôi chỉ mới thấy có sự kiện Calulate (có thể còn các sự kiện khác mà tôi chưa biết) đáp ứng với các thay đổi của việc lọc dữ liệu, do đó tôi tam đưa việc đặt lại màu khi có sự kiện lọc xảy ra và trong sự kiện Calculate.
Nếu bạn biết có thêm 1 sự kiện nào có thể đáp ứng yêu cầu này đưa lên đây để chúng ta cùng xem xét nhé.

Ngoài ra, lúc đầu tôi có chèn thêm 2 dòng mã kiểm tra vào giữa câu lệnh gọi setcolorField nhằm mục đích kiểm tra hiện thời sheet có trong tình trạng lọc hay không. Nhưng sau thấy không cần thiết nên bỏ đi.

Hơn nữa, nếu 1 vài ô đã thay đổi màu mà sau đó bạn tắt autoF thì tôi chưa hoàn trả lại màu gốc cho các ô này. Nếu thấy cần thiết thì bạn có thể viết bổ sung để giải quyết nó.

Thân!
 
Upvote 0
Trong số các sự kiện của sheet, tôi chỉ mới thấy có sự kiện Calulate (có thể còn các sự kiện khác mà tôi chưa biết) đáp ứng với các thay đổi của việc lọc dữ liệu, do đó tôi tam đưa việc đặt lại màu khi có sự kiện lọc xảy ra và trong sự kiện Calculate.
Nếu bạn biết có thêm 1 sự kiện nào có thể đáp ứng yêu cầu này đưa lên đây để chúng ta cùng xem xét nhé.

Ngoài ra, lúc đầu tôi có chèn thêm 2 dòng mã kiểm tra vào giữa câu lệnh gọi setcolorField nhằm mục đích kiểm tra hiện thời sheet có trong tình trạng lọc hay không. Nhưng sau thấy không cần thiết nên bỏ đi.

Hơn nữa, nếu 1 vài ô đã thay đổi màu mà sau đó bạn tắt autoF thì tôi chưa hoàn trả lại màu gốc cho các ô này. Nếu thấy cần thiết thì bạn có thể viết bổ sung để giải quyết nó.

Thân!
Tôi cũng đồng ý nên đặt vào sự kiện Calculate... thế thì:
- Nếu trên sheet đã có các cell chứa hàm tính toán thì để nguyên
- Nếu trên sheet chỉ toàn có dử liệu nhập, không có công thức thì ta chọn 1 cell trống nào đó rồi gõ hàm =TODAY() hoặc =RAND() vào
Vậy là TÍNH TOÁN được rồi
Và tôi sửa code lại thế này:
PHP:
Option Explicit
Private Sub Worksheet_Calculate()
  Dim i As Long
  With ActiveSheet.AutoFilter
    For i = 1 To .Filters.Count
      .Range(1, i).Interior.ColorIndex = -(.Filters(i).On) * 41
    Next
  End With
End Sub
Bạn thấy sao! Xin góp thêm ý kiến
Cảm ơn
 

File đính kèm

  • FilterColor_01.xls
    25 KB · Đọc: 142
Upvote 0
Đoạn code trên rất ngắn gọn, chỉ cần thêm lệnh bẫy lỗi để phòng khi sheet không có filter.

Nhưng cũng xin nói lại: mỗi khi có thay đổi về filter thì đều gọi sự kiện calculate bất kể trên sheet có công thức hay không. Do đó không nhất thiết phải bổ sung gì vào sheet.
 
Upvote 0
Đoạn code trên rất ngắn gọn, chỉ cần thêm lệnh bẫy lỗi để phòng khi sheet không có filter.

Nhưng cũng xin nói lại: mỗi khi có thay đổi về filter thì đều gọi sự kiện calculate bất kể trên sheet có công thức hay không. Do đó không nhất thiết phải bổ sung gì vào sheet.
Không được bạn ơi! Tôi đã thử rồi, nếu trên sheet không có công thức thì code sẽ không chạy!
Bạn xem trong file trên, tôi phải đặt 1 công thức tại cell IV1 đấy ---> Xóa công thức này là tèo luôn
 
Upvote 0
Không được bạn ơi! Tôi đã thử rồi, nếu trên sheet không có công thức thì code sẽ không chạy!
Bạn xem trong file trên, tôi phải đặt 1 công thức tại cell IV1 đấy ---> Xóa công thức này là tèo luôn
Có thể mai kia có giải pháp khác nhưng hiện nay chỉ có thể dừng ở đây thôi anh à. Em cũng có tham khảo nhiều file (kể cả của Contextures) họ cũng phải có tối thiểu 1 Cell(s) là công thức và cũng dùng sự kiện Calculate.

TDN
 
Upvote 0
sao em có 1 cau o day bi xoa rồi nhỉ?
em muốn hỏi là
sso sánh 2 cột, nếu cố L <>cột M thì cột L bị đổi màu còn không thì như cũ
em xin cam on
 
Upvote 0
Xin mọi người chỉ giùm mình với: Mình muốn lấy dữ liệu một cách tự động tại một ô cell nào đó sau khi autofilter
Ví dụ: sau khi autofil những ô có dữ liệu là p1 của một cột nào đó. Mình muốn p1 được hiển thị tự động tại một ô trong bảng tính.
xin chủ giúp!!!
 
Upvote 0
Web KT
Back
Top Bottom