- Tham gia
- 5/6/08
- Bài viết
- 30,703
- Được thích
- 53,930
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
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?
Tôi cũng đồng ý nên đặt vào sự kiện Calculate... thế thì: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!
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
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!Đ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.
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.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
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2