Macro chạy chậm, nhưng bước nhanh (Microsoft Excel)
Fredric đã viết về một vấn đề mà anh ấy đang gặp phải với một macro. Khi anh ta đang chạy macro trong VB Editor bằng F8 (bước qua macro), nó sẽ hoàn thành chỉ sau vài phút. Khi anh ta chạy macro hoàn toàn, có vẻ như sẽ mất mãi mãi để chạy, thường mất 20 phút hoặc hơn để thực thi. Mặc dù sổ làm việc của Fredric lớn (46 MB), sự khác biệt về thời gian giữa hai phương pháp chạy là khá khó chịu.
Những vấn đề như thế này có thể gây khó hiểu và họ thường thực hiện một số phân tích nặng nhọc để tìm ra. Một nơi tốt để bắt đầu là thêm một số “mã hẹn giờ” trong macro của bạn. Thêm một quy trình nhỏ giúp lưu giá trị thời gian và một quy trình khác so sánh giá trị đã lưu đó với thời gian hiện tại và hiển thị sự khác biệt. Ở phần đầu của đoạn mã bạn muốn phân tích, bạn gọi quy trình đầu tiên (giúp tiết kiệm thời gian bắt đầu)
và sau đó ở cuối phần mã bạn gọi là quy trình thứ hai.
Bằng cách đó, bạn có thể xác định phần nào trong mã của mình mất nhiều thời gian nhất để thực thi. Đây là những phần mã sau đó bạn tập trung vào, vì vậy bạn có thể tìm ra những gì họ đang làm mà mất quá nhiều thời gian.
Một điều nữa là hãy chắc chắn rằng bạn thêm hai dòng này vào đầu macro của bạn:
Application.ScreenUpdating = False Application.EnableEvents = False
Các tùy chọn này sẽ tắt cập nhật màn hình, điều này có thể làm chậm macro đang chạy và vô hiệu hóa các sự kiện. Dòng cuối cùng này được bao gồm để các thay đổi do macro thực hiện trong trang tính của bạn sẽ không kích hoạt các quy trình tính toán lại của Excel. Nếu macro của bạn đang thực hiện nhiều thay đổi trong dữ liệu trong trang tính và tính toán lại đầy đủ được kích hoạt sau mỗi lần thay đổi, thì với một sổ làm việc lớn như vậy, bạn có thể dành rất nhiều thời gian để thực hiện tính toán lại. Ở cuối macro của bạn, bạn đảo ngược hiệu ứng của hai dòng bạn đã thêm:
Application.EnableEvents = True Application.ScreenUpdating = True
Bạn cũng có thể muốn tắt tính toán tự động trong khi macro của bạn đang chạy. Làm như vậy đảm bảo rằng Excel không cố gắng tính toán các kết quả trung gian trong khi macro đang di chuyển mọi thứ xung quanh hoặc làm việc với dữ liệu. Để tắt tính toán tự động, hãy sử dụng dòng này ở đầu macro của bạn:
Application.Calculation = xlCalculationManual
Bạn chỉ nên tắt tính toán tự động trong macro nếu macro của bạn không dựa trên thông tin được tính toán trong trang tính. Nếu bạn tắt nó đi, sau này bạn có thể bật lại tính toán tự động bằng cách đặt dòng sau gần cuối macro của bạn:
Application.Calculation = xlCalculationAutomatic
Một độc giả đã đề xuất tập trung vào ứng dụng khác trong khi macro đang chạy trong trang tính Excel. Ví dụ: mở Notepad và kích hoạt cửa sổ đó. Macro sẽ tăng tốc đáng kể khi Excel không hoạt động nữa. Một tùy chọn khác để thử là di chuyển con trỏ chuột xuống khu vực thanh tác vụ thay vì để nó trên trang tính Excel đang hoạt động.
_Lưu ý: _
Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.
ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.
Mẹo này (818) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện menu cũ hơn của Excel tại đây: