Chào các bác,
File excel của em, khi chạy một vài code, mặc dù đã không cho update màn hình Application.ScreenUpdating = False (cuối sub em đã trả về True), tuy nhiên thỉnh thoàng màn hình vẫn nhấp nháy trong quá trình chạy code, em không biết ngoài cái .ScreenUpdating thì còn cái gì nữa không ạ? hóng các bác giúp đỡ ạ.
Chào các bác,
File excel của em, khi chạy một vài code, mặc dù đã không cho update màn hình Application.ScreenUpdating = False (cuối sub em đã trả về True), tuy nhiên thỉnh thoàng màn hình vẫn nhấp nháy trong quá trình chạy code, em không biết ngoài cái .ScreenUpdating thì còn cái gì nữa không ạ? hóng các bác giúp đỡ ạ.
Chả bao giờ dùng đến cái Application.ScreenUpdating, cứ mỗi khi viết một sub lại đi gõ vô tội vạ cái Application.ScreenUpdating có khi làm code chậm hơn ý.
Kinh nghiệm thì có nhưng cách sử lý hơi hẹp. Có lẽ do trên diễn đàn này, khi nói chuyện code ngừoi ta chỉ quan tâm đến tốc độ chứ không hề nói tới vấn đề quản lý code.
Khi có nhiều hơn vài ba functions/subs thì phải chú ý đến vấn đề quản lý code:
- Khi có trường hợp các subs/functions gọi nhau thì sẽ rất dễ xảy ra việc các code này bị đụng chạm nhau trong việc sử dụng các objects toàn cục.
Application là một object toàn cục. Thuộc tính ScreenUpdating của nó vì là public cho nên cũng có tính chất toàn cục.
Hai subs A và B cùng đặt ScreenUpdating là False rồi trả nó về True sẽ không sao nếu A và B không liên hệ gì với nhau. Nhưng nếu A gọi B thì B sẽ đưa ScreenUpdating về True khiến cho A bị hẫng.
Người biết quản lý code luôn luôn có cách tránh trường hợp này. Một trong những cách tránh là cho sub save lại các giá trị toàn cục trước khi thay đổi chúng, và sau khi dùng xong thì trả chúng về các giá trị đã saved.
Tóm lại, nếu có nhiều subs gọi nhau thì tất cả các code ScreenUpdating phải sửa lại như thế này:
Dim Saved_ScreenUpdating As Boolean
Saved_ScreenUpdating = Application.ScreenUpdating
Application.ScreenUpdating = False
... code ở đây
Application.ScreenUpdating = Saved_ScreenUpdating
+++ Với cách quản lý này, nếu A gọi B thì B sẽ trả ScreenUpdating về đúng với tình trạng mà A đã đặt, và A không bj hẫng.
Chả bao giờ dùng đến cái Application.ScreenUpdating, cứ mỗi khi viết một sub lại đi gõ vô tội vạ cái Application.ScreenUpdating có khi làm code chậm hơn ý.
Em thì lại rất thích cái chuyện chạy như rùa này, chả thế em dùng máy tính cấu hình thấp lắm, có như vậy máy tính nó mới chạy theo mình, nhanh quá là mình lại phải chạy theo nó, thà để máy tính chạy phát khói ròi mình đi "tơi" chứ ngồi so nhịp nhanh chậm với máy tính chán lắm anh ơi.