Một lúc trước tôi đang nói chuyện với một đồng nghiệp và anh ta mô tả một vấn đề mà anh ta đang gặp phải với một macro đang chạy trên một hệ thống máy tính rất mạnh.

Có vẻ như macro sẽ luôn bị treo và đóng băng máy, luôn xảy ra lỗi hết bộ nhớ. Đồng nghiệp của tôi nghĩ rằng nếu macro có thể chạy ở chế độ nền, thì nó sẽ không sử dụng quá nhiều tài nguyên và sẽ không gặp sự cố.

Tuy nhiên, tôi biết rằng giải pháp được đề xuất sẽ không nhất thiết giải quyết được vấn đề. Mặc dù nó có thể giải phóng một số tài nguyên, nhưng cuối cùng hệ thống vẫn sẽ hết bộ nhớ. Tại sao? Bởi vì các vấn đề hết bộ nhớ thường là do sự cố mã hóa trong macro gốc.

“Rò rỉ bộ nhớ” (dẫn đến tình trạng hết bộ nhớ) có thể do bất kỳ sự cố nào trong mã macro gây ra.

Giải pháp tốt nhất là gỡ lỗi đêm khuya, xem qua mã macro và phân tích xem vấn đề đang xảy ra ở đâu. Trước tiên, hãy tìm các vấn đề rõ ràng nhất (nhưng dễ bị bỏ qua), chẳng hạn như vòng lặp vô hạn. Nếu macro đang thực hiện nhiều xử lý lặp lại (lặp qua các trang tính), thì hãy đảm bảo rằng bạn đang giải phóng tất cả bộ nhớ mà bạn khai báo cho macro của mình. Ví dụ, đối với mọi câu lệnh SET mà bạn sử dụng, bạn phải có một câu lệnh tương ứng đặt đối tượng thành NOTHING và những câu lệnh đó phải nằm trong vòng lặp.

Nếu bạn có thể bước qua các macro mà không bị lỗi, thì rất có thể vấn đề nằm ở một số loại vấn đề về thời gian trong chuỗi — tất nhiên vấn đề về thời gian chỉ hiển thị khi macro đang chạy chế độ nghiêng hoàn toàn. của riêng nó. Nếu bạn nghi ngờ đây là vấn đề, thì có lẽ việc tái trình tự các sự kiện trong macro có thể giải quyết vấn đề đó.

Nếu macro sử dụng DDE, bạn nên biết rằng Microsoft đang khuyến nghị sử dụng tự động hóa OLE thay vì DDE. Các vấn đề về thời gian khá phổ biến với DDE và Microsoft hiện coi nó là lỗi thời và quá dễ sửa chữa (có nghĩa là họ sẽ không hỗ trợ nó). Trong VBA, nhiều lệnh gọi đến một chương trình con cũng có thể gây rò rỉ bộ nhớ và các chương trình con như vậy phải được viết lại dưới dạng các hàm do người dùng định nghĩa.

Bạn cũng nên đảm bảo rằng tất cả các tham chiếu biến được khai báo đầy đủ. Tôi đã thấy một số báo cáo về việc macro bị “nhầm lẫn” giữa các trang tính và ngay cả khi bạn sử dụng Alt + Tab để xóa tiêu điểm khỏi Excel.

_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 (2579) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003.