Hỏi về lệnh Application.Screen.Updating

Liên hệ QC

nghiah5

Thành viên mới
Tham gia
21/3/11
Bài viết
12
Được thích
0
Chào anh chị.
Em có đọc về lệnh screen.Updating nhưng không hiểu công dụng của nó như thế nào, và áp dụng trong những trường hợp cụ thể nào. em thử đọc vài đoạn code, thấy bỏ đi nó vẫn không ảnh hưởng đến kết quả. Đọc tutorial chỉ nghe nói nó tăng tốc cho đoạn code.
anh chị có thể giải thích thêm giúp em và các bạn mới học, hoặc có 1 ví dụ nhỏ để làm rõ nó k ạ.
Cảm ơn mọi người
 
Nếu không muốn cập nhật những gì sẽ hiển thị mà hình sau khi tính toán, copy, xử lý dữ liệu bằng VBA, người ta thường dùng Application.ScreenUpdating = False để bỏ qua những công đoạn "chớp chớp" màn hình, như vậy sẽ cải thiện tốc độ của VBA khi chạy trên sheet.

Nó có tác dụng làm giảm hoặc bỏ qua giai đoạn Sleep/ Repaint trên màn hình. Sau khi chạy code xong, trả lại cho nó về Application.ScreenUpdating = True.
 
Upvote 0
Chào anh chị.
Em có đọc về lệnh screen.Updating nhưng không hiểu công dụng của nó như thế nào, và áp dụng trong những trường hợp cụ thể nào. em thử đọc vài đoạn code, thấy bỏ đi nó vẫn không ảnh hưởng đến kết quả. Đọc tutorial chỉ nghe nói nó tăng tốc cho đoạn code.
anh chị có thể giải thích thêm giúp em và các bạn mới học, hoặc có 1 ví dụ nhỏ để làm rõ nó k ạ.
Cảm ơn mọi người
Mỗi khi chạy code update giá trị lên sheet, sheet hiện hành và màn hình sẽ cập nhật giá trị mới và màn hình sẽ bị chớp. Quá trình này gây khó chịu cho người xem và làm chậm code. Để làm cho code chạy nhanh hơn thì ta dùng câu lệnh trên để hủy cũng như khôi phục chức năng cập nhật màn hình.

Application.Screen.Updating = false : hủy
Application.Screen.Updating = true : khôi phục
 
Lần chỉnh sửa cuối:
Upvote 0
Chào anh chị.
Em có đọc về lệnh screen.Updating nhưng không hiểu công dụng của nó như thế nào, và áp dụng trong những trường hợp cụ thể nào. em thử đọc vài đoạn code, thấy bỏ đi nó vẫn không ảnh hưởng đến kết quả. Đọc tutorial chỉ nghe nói nó tăng tốc cho đoạn code.
anh chị có thể giải thích thêm giúp em và các bạn mới học, hoặc có 1 ví dụ nhỏ để làm rõ nó k ạ.
Cảm ơn mọi người
Thì cứ thí nghiệm xem
Code không có ScreenUpdating = False
PHP:
Sub Test1()
  Dim i As Long, TG As Double
  TG = Timer
  Range("A:A").Clear
  For i = 1 To 60000
    Cells(i, 1) = i
  Next
  MsgBox Format(Timer - TG, "0.000000")
End Sub
Và code có ScreenUpdating = False
PHP:
Sub Test2()
  Dim i As Long, TG As Double
  TG = Timer
  Application.ScreenUpdating = False
  Range("A:A").Clear
  For i = 1 To 60000
    Cells(i, 1) = i
  Next
  Application.ScreenUpdating = True
  MsgBox Format(Timer - TG, "0.000000")
End Sub
 
Upvote 0
Nếu không muốn cập nhật những gì sẽ hiển thị mà hình sau khi tính toán, copy, xử lý dữ liệu bằng VBA, người ta thường dùng Application.ScreenUpdating = False để bỏ qua những công đoạn "chớp chớp" màn hình, như vậy sẽ cải thiện tốc độ của VBA khi chạy trên sheet.

Nó có tác dụng làm giảm hoặc bỏ qua giai đoạn Sleep/ Repaint trên màn hình. Sau khi chạy code xong, trả lại cho nó về Application.ScreenUpdating = True.
Dear,
Cho mình hỏi: lúc đầu khi chạy form để nhập dữ liệu vào thì nó khá chậm. Khi mình dùng chức năng
Application.ScreenUpdating = False/True
Application.EnableEvents = False/True
Application.Calculation = xlCalculationManual/xlCalculationAutomatic
Thì file chạy nhanh rất rõ.
Tuy nhiên, có một vấn đề xãy ra khiến mình bó tay. Các công thức được viết từ các đoạn code trước đó lại không tự tính toán. Mà phải nhấp đúp vào ô đó rồi bỏ chọn thì công thức mới tính được, nó không còn tự động như trước. Ví dụ: trước đây, khi nhập Mã HH từ Form vào, thì nó sẽ tự tìm đơn giá và tính toán thành tiền... Nhưng hiện tại nó không tự tính nữa, mà phải nhấp đúp vào mã HH vừa thêm vào rồi Enter thì nó mới tính toán, hoặc phải viết công thức bên ngoài excel thay vì viết code như hiện tại thì nó mới tự tính được. Khi mình bỏ hết các đoạn code để tăng tốc độ macro để quay về hiện trạng như ban đầu thì cũng không được.
Nhờ 500 anh em giúp em vấn đề này ạ (nvminh2010@gmail.com).
Xin chân thành cảm ơn!
 
Upvote 0
Dear,
Cho mình hỏi: lúc đầu khi chạy form để nhập dữ liệu vào thì nó khá chậm. Khi mình dùng chức năng
Application.ScreenUpdating = False/True
Application.EnableEvents = False/True
Application.Calculation = xlCalculationManual/xlCalculationAutomatic
Thì file chạy nhanh rất rõ.
Tuy nhiên, có một vấn đề xãy ra khiến mình bó tay. Các công thức được viết từ các đoạn code trước đó lại không tự tính toán. Mà phải nhấp đúp vào ô đó rồi bỏ chọn thì công thức mới tính được, nó không còn tự động như trước. Ví dụ: trước đây, khi nhập Mã HH từ Form vào, thì nó sẽ tự tìm đơn giá và tính toán thành tiền... Nhưng hiện tại nó không tự tính nữa, mà phải nhấp đúp vào mã HH vừa thêm vào rồi Enter thì nó mới tính toán, hoặc phải viết công thức bên ngoài excel thay vì viết code như hiện tại thì nó mới tự tính được. Khi mình bỏ hết các đoạn code để tăng tốc độ macro để quay về hiện trạng như ban đầu thì cũng không được.
Nhờ 500 anh em giúp em vấn đề này ạ (nvminh2010@gmail.com).
Xin chân thành cảm ơn!
Tùy theo dữ liệu đưa vào buộc phải tính trong lúc nhập hay không mà ta có thể dùng Application.Calculation = xlCalculationManual/xlCalculationAutomatic hay không. Thậm chí ta có thể vẫn dùng cái đó, nhưng cho phép dòng vừa nhập được tính toán.
 
Upvote 0
Web KT

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

Back
Top Bottom