Tạm thời vô hiệu chức năng Conditional formatting bằng VBA

Liên hệ QC
Tham gia
23/12/15
Bài viết
351
Được thích
271
Giới tính
Nam
Chào cả nhà. Trong quá trình viết code VBA liên quan đến bảng tính, để tăng tốc độ xử lí thì mình hay tắt Automatic calculation và Screen updating. Tuy nhiên còn một chức năng khác cũng làm chậm tốc độ xử lí là Conditional formatting, vậy nhờ mọi người cách để tạm thời vô hiệu chức năng này trước khi VBA chạy, sau khi VBA chạy xong thì lại bật lại. Cảm ơn mọi người.
 
Chào cả nhà. Trong quá trình viết code VBA liên quan đến bảng tính, để tăng tốc độ xử lí thì mình hay tắt Automatic calculation và Screen updating. Tuy nhiên còn một chức năng khác cũng làm chậm tốc độ xử lí là Conditional formatting, vậy nhờ mọi người cách để tạm thời vô hiệu chức năng này trước khi VBA chạy, sau khi VBA chạy xong thì lại bật lại. Cảm ơn mọi người.
Đã tắt 2 chức năng ScreenUpdating và Calulation (nhớ chuyển về Manual) --> thì conditional formatting còn ảnh hưởng chi nữa mà lo nhỉ
Có thêm thì thêm bật tắt event
Application.EnableEvents = False


Vẫn còn chậm thì xem lại code nhé.
 
Lần chỉnh sửa cuối:
Upvote 0
Đã tắt 2 chức năng ScreenUpdating và Calulation (nhớ chuyển về Manual) --> thì conditional formatting còn ảnh hưởng chi nữa mà lo nhỉ
Vẫn ảnh bình thường.

Không tin thì tự làm như sau:
Tạo Conditional Formatting cho cell A1, nếu > 0 thì tô màu vàng chẳng hạn.
PHP:
Sub vidu()
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    Sheet1.Range("A1").Value = 2
End Sub
 
Upvote 0
Vẫn ảnh bình thường.

Không tin thì tự làm như sau:
Tạo Conditional Formatting cho cell A1, nếu > 0 thì tô màu vàng chẳng hạn.
PHP:
Sub vidu()
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    Sheet1.Range("A1").Value = 2
End Sub
Sau khi chạy hay đang trong quá trình chạy (runtime) vậy?
Ta chỉ cần thêm cái này sẽ hiểu
Mã:
Sub vidu()
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    Sheet1.Range("A1").Value = 2
    MsgBox "pause"
End Sub
 
Upvote 0
Application.EnableEvents = False
Không ăn thua bác ơi, mình hay dùng Conditional formatting để tô đỏ các ô bị trùng (dupplicate). Bỏ cả code của bác vào nhưng nó vẫn ngay lập tức tô đỏ dữ liệu được nhập bằng VBA. Dĩ nhiên lúc này mình phải bật screen updating lên mới nhìn thấy điều này.
 
Upvote 0
Không ăn thua bác ơi, mình hay dùng Conditional formatting để tô đỏ các ô bị trùng (dupplicate). Bỏ cả code của bác vào nhưng nó vẫn ngay lập tức tô đỏ dữ liệu được nhập bằng VBA. Dĩ nhiên lúc này mình phải bật screen updating lên mới nhìn thấy điều này.
Thế bạn không bật nó lên nhé, thì nó chưa cập nhật, còn bật thì còn gọi gì là tắt

Và quan trọng là CODE thực thi thế nào, thường người ta chỉ gán kết quả xuống sheet vào phần cuối của chương trình
 
Lần chỉnh sửa cuối:
Upvote 0
Chào cả nhà. Trong quá trình viết code VBA liên quan đến bảng tính, để tăng tốc độ xử lí thì mình hay tắt Automatic calculation và Screen updating. Tuy nhiên còn một chức năng khác cũng làm chậm tốc độ xử lí là Conditional formatting, vậy nhờ mọi người cách để tạm thời vô hiệu chức năng này trước khi VBA chạy, sau khi VBA chạy xong thì lại bật lại. Cảm ơn mọi người.
Có cách đơn giản là sử dụng dấu check "Stop If True" trong CF
Xem hình và tự suy luận nha

StopCF.jpg



Tức là dùng 1 cell trung gian để stop toàn bộ CF, cụ thể trong hình là cell A1, nếu cho A1=True thì lập tức các CF ở tất cả các vùng sẽ bị tắt hết
 
Upvote 0
Upvote 0
Có cách đơn giản là sử dụng dấu check "Stop If True" trong CF
Xem hình và tự suy luận nha
Tức là dùng 1 cell trung gian để stop toàn bộ CF, cụ thể trong hình là cell A1, nếu cho A1=True thì lập tức các CF ở tất cả các vùng sẽ bị tắt hết
Cám ơn bác, cách này có vẻ là ổn áp nhất, tuy vẫn phải chạy 1 cái CF nhưng nó rất đơn giản và đỡ tốn thời gian hơn cái đống CF của em nhiều.
Em đang nghiên cứu 1 cách nữa là xóa toàn bộ CF, sau khi VBA chạy xong thì làm lại chỗ CF này, cơ mà có vẻ không khả thi lắm.
 
Upvote 0
Cám ơn bác, cách này có vẻ là ổn áp nhất, tuy vẫn phải chạy 1 cái CF nhưng nó rất đơn giản và đỡ tốn thời gian hơn cái đống CF của em nhiều.
Em đang nghiên cứu 1 cách nữa là xóa toàn bộ CF, sau khi VBA chạy xong thì làm lại chỗ CF này, cơ mà có vẻ không khả thi lắm.
Cách của tôi chỉ mất 5 phút là xong nha bạn. Cách làm:
1> Đầu tiên bấm Ctrl + G, bấm tiếp nút Special và chọn mục Conditional Formats rồi OK
2> Excel sẽ quét chọn toàn bộ CF đang có trên bảng tính. Lúc này bạn bấm vào mũi tên xổ xuống của nút Conditional Formating trên thanh Ribbon, chọn Manage Rules
3> Bấm nút New Rule, chọn mục "Use a formula.... ", chọn đại 1 cell nào đó (chẳng hạn là cell A1) rồi OK. Check mục "Stop if True" rồi Apply
Từ giờ, cứ gõ True vào cell A1 là các CF khác sẽ bị ngưng hoạt động
Nói thì lâu, làm trong nháy mắt
 
Upvote 0
Cám ơn bác, cách này có vẻ là ổn áp nhất, tuy vẫn phải chạy 1 cái CF nhưng nó rất đơn giản và đỡ tốn thời gian hơn cái đống CF của em nhiều.
Em đang nghiên cứu 1 cách nữa là xóa toàn bộ CF, sau khi VBA chạy xong thì làm lại chỗ CF này, cơ mà có vẻ không khả thi lắm.
Theo hướng tạo CF mới và stop if true (#7), để không cần gán giá trị xuống sheet, bạn có thể tạo defind names như là "EnableCF" và đặt nó giá trị bằng 1
Nếu bằng 1 thì cf khác chạy, còn nếu khác 1 (0 chẳng hạn) thì tắt.
Trong code bạn chép vào:
Mã:
Names("EnableCF").Value = 0
'code here
Names("EnableCF").Value = 1
 
Upvote 0
Không có phiên bản office nào gọi là office 2017 cả. Tôi excel 2007 đây còn có huống chi là excel 2016.
Em đã thử nhưng không thành công, excel vẫn tự động tô màu sau khi nhập 2 (điều kiện của CF là >0) vào ô A1.
Hay em bỏ sót bước nào, bác chỉ giùm em được không?

1603695880380.png
 
Upvote 0
Đang chạy mà tắt screen updating thì đương nhiên là ô sẽ không đổi màu rồi bác ơi, nhưng ko có nghĩa là Conditinal formating không chạy.
Chứng minh là nó có chạy xem.

Gợi ý: không cần phải đoán mò. Viết một UDF, hiện dòng chữ "CO CHAY Ba con oi" (immdiate hay msgbox tuỳ ý). Gọi UDF này trong conditional formating vài ô trong vùng dữ liệu (cỡ chục ô đầu).
 
Upvote 0
Em đã thử nhưng không thành công, excel vẫn tự động tô màu sau khi nhập 2 (điều kiện của CF là >0) vào ô A1.
Hay em bỏ sót bước nào, bác chỉ giùm em được không?

View attachment 248069
Bạn cứ áp dụng vào file thực tế của bạn xem có hiệu quả hay không chứ đừng đi thử linh ta linh tinh.
Khi bạn đặt Calculation Option là Manual, nhập công thức vào một ô nào đó thì công thức đó có thực hiện tính toán không? Bạn tự thử nghiệm và tự rút ra kết luận về cái thí nghiệm của bạn nhé.
 
Upvote 0
Web KT

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

Back
Top Bottom