Macro, khi đang chạy, ngăn Excel phản hồi (Microsoft Excel)
Khi Dave viết một macro phải xử lý nhiều thông tin trong vòng lặp For … Next, anh ta luôn sử dụng thanh trạng thái để chỉ ra tiến trình.
Thông thường, anh ta sẽ có một thông báo hiển thị ở đó, chẳng hạn như “Đang xử lý hàng X của Y.” Khi “Y” là một giá trị lớn (đầu cuối của vòng lặp For … Next), Excel thường ngừng cập nhật thanh trạng thái và hiển thị một cái gì đó như “Không phản hồi” trên thanh tiêu đề của Excel. Tuy nhiên, macro vẫn đang chạy và khi nó hoàn tất, Excel sẽ bắt đầu phản hồi và mọi thứ hoạt động như bình thường. Dave tự hỏi làm thế nào anh ta có thể làm cho Excel ngừng hoạt động theo cách này và thay vào đó, hiển thị các cập nhật trên thanh trạng thái như anh ta muốn.
Hành vi này dường như xảy ra khi Windows xuất hiện rằng Excel đã ngừng phản hồi. (Xét cho cùng, chính Windows chịu trách nhiệm về những gì xuất hiện trên thanh tiêu đề của chương trình.) Tôi có thể tạo lại hành vi khá dễ dàng nếu tôi có nhiều chương trình đang mở trong Windows và tôi nhấp vào một cửa sổ chương trình khác trong khi Excel đang lướt qua một macro dài. Về cơ bản, nếu Excel đang bận thực hiện macro hoặc nó không thể theo kịp yêu cầu Windows cập nhật thanh trạng thái, thì nó thực sự xuất hiện giống như Excel đã ngừng phản hồi.
Có hai cách tiếp cận có thể được sử dụng. Đầu tiên, bạn có thể sử dụng lệnh DoEvents trong vòng lặp. Thông thường, điều này được sử dụng để hướng dẫn macro chú ý đến bất kỳ thứ gì nằm trong hàng đợi sự kiện, chẳng hạn như khi ai đó nhấn bàn phím. Nó tương đương với việc buộc Excel phải “tra cứu” từ macro mà nó đang hoạt động và giao tiếp với Windows. Điều này nhất thiết sẽ cho Windows biết rằng Excel thực sự đáp ứng và cho phép các cập nhật cho thanh trạng thái xảy ra.
Bạn thậm chí có thể đặt lệnh ngay sau khi cập nhật thanh trạng thái:
Application.StatusBar = "Processing row " & X & " of " & Y DoEvents
Điều khác cần thử là không cập nhật thanh trạng thái nhiều.
Nếu phần trên của vòng lặp của bạn rất lớn, thì tốt hơn là bạn nên tính toán tỷ lệ phần trăm và cập nhật thanh trạng thái khi một số phần của tổng số được hoàn thành — có lẽ cứ sau mỗi 5% hoặc 10% tổng số. Điều này có nghĩa là thanh trạng thái chỉ cần được cập nhật 10 hoặc 20 lần trong vòng lặp, thay vì hàng trăm hoặc hàng nghìn lần. Điều này có thể có nghĩa là Windows có thể theo kịp các yêu cầu cập nhật thanh trạng thái và như một phần thưởng, macro của bạn có thể chạy nhanh hơn vì nó không phải cập nhật thanh trạng thái thường xuyên.
_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 (13341) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365.