Vấn đề là:
- Đoạn code đó có tác động gì tới các controls/control ko ấy chứ (nếu chỉ for I = 1 .... 1 tỷ, rồi trong vòng lặp đó chỉ thực hiện A = A + 1 thì chả tác động gì tới các controls nào trên form cả). Phải tác động thật nhiều tới các window (ko có chữ "s" nhé) làm cho window đó phải pain đi pain lại (cái này ai lập trình C for Windows nói phát hiểu ngay). Hoặc đơn giản thế này, hãy thử fillcolor lên form bằng cách vẽ từng pixel cho đến khi nó kín cái form đó. Nếu cứ vẽ 1 cái nó hiện ra thì có lẽ tới tết công gô mới fill hết 1 cái form.
- Số lượng dữ liệu có nhiều ko ấy chứ?
Application.ScreenUpdating = False
For i = 1 to n '//1 tỷ
- Nếu lệnh thực hiện trong này ko tác động gì tới Control (tức Window) (ví dụ: A = A + 1) thì ScreenUpdating = False cũng trả có ý nghĩa gì vì nó có pain cái gì đâu.
- Nếu lệnh thực hiện trong này làm cho các control phải pain lại (không thể dùng từ khác từ pain được vì bản chất đúng là PAIN thật) thì với câu lệnh ScreenUpdating = False nó sẽ ko pain nữa. Khi nào thực hiện xong (ví dụ vòng for này) thì bật lại ScreenUpdating = True để ta có thể xem kết quả việc việc thực hiện. Tức là các window chỉ pain 1 lần sau khi thực hiện xong thôi, ko pain liên tục giữa chừng.
- Khi nào n = cực lớn mới thấy tác dụng, còn n = 10,..., 100 thì nhiều khi do tốc độ máy tính mình nhanh quá nên chỉ thấy nó thay đổi tý tẹo
Next
Application.ScreenUpdating = True
Nói chung, phải hiểu biết về lập trình windows (Windows Programming) thì vấn đề này ko cần nói gì thêm cả. Và Hải cũng chỉ nói tới đây thôi (vì giải thích cực kỳ kỹ lưỡng rồi). Thực ra bài này Tuân nói từ lâu lắm rồi (về vấn đề tăng tốc trong Excel)