Guillermo có một loạt macro mà anh thường xuyên chạy và khi anh chạy từng macro theo cách thủ công, chúng hoạt động tốt. Anh ta đã cố gắng đặt tất cả các macro vào một macro “RunAll” (vì vậy anh ta chỉ phải chạy một macro thay vì sáu macro riêng lẻ) và bây giờ một trong số chúng không chạy đúng cách. Khi anh ta thực thi macro RunAll, anh ta gặp lỗi rằng một ô được bảo vệ và chỉ đọc. Tuy nhiên, không có bảo vệ nào trên trang tính và nếu anh ta chạy các macro riêng lẻ, anh ta sẽ không gặp lỗi.

Không nên nói rằng macro thực thi tốt riêng lẻ nhưng không kết hợp với các macro khác đang gặp phải điều gì đó khiến nó không hoạt động bình thường. Có thể điều đó có nghĩa là một macro đang chạy trước khi nó rời khỏi sổ làm việc ở trạng thái khác với trạng thái hiện tại nếu bạn chạy các macro riêng lẻ.

Ví dụ: nếu macro hoạt động sai là macro thứ ba trong chuỗi chạy, hãy kiểm tra hai macro đầu tiên để xem chúng đang làm gì. Họ có thay đổi các ô đã chọn không? Họ có thay đổi trang tính đang hoạt động không? Chúng có thay đổi bất kỳ điều kiện nào mà macro thứ ba mong đợi không? Bất kỳ điều nào trong số này có thể khiến macro thứ ba không hoạt động bình thường.

Đó là gợi ý thứ hai — về trang tính đang hoạt động — đó là tình huống có thể xảy ra nhất. Khi bạn chạy macro riêng lẻ, rất có thể bạn chạy macro với một trang tính cụ thể đang hoạt động. Tuy nhiên, các macro khác có thể thay đổi trang tính đang hoạt động thành một trang tính khác và trang tính khác có thể là trang tính được áp dụng biện pháp bảo vệ.

Giải pháp là kiểm tra từng macro để đảm bảo rằng nó lưu thông tin định vị (trang tính, ô hoạt động, các ô đã chọn, v.v.)

trước khi thực hiện bất kỳ thay đổi nào đối với những điều đó. Với chúng đã được lưu, việc khôi phục chúng ở cuối macro là một vấn đề dễ dàng.

Nếu điều đó vẫn không làm được, thì bạn có thể cần phải thực hiện một số gỡ lỗi. Trong macro “RunAll”, sử dụng VBA Editor để thiết lập một điểm ngắt trên dòng gọi macro bị lỗi. Sau đó, bạn có thể sử dụng “Step Into”

lệnh để bước vào macro và kiểm tra vị trí xảy ra lỗi. Đặc biệt chú ý đến trang tính và ô mà macro đang cố gắng thay đổi, sau đó xem liệu bạn có thể tìm ra điều gì đang xảy ra với các macro trước đó để dẫn đến trang tính và ô đó hay không. Bạn có thể sử dụng một trong các dòng sau trong cửa sổ Ngay lập tức để xem bạn đang ở đâu:

? ActiveSheet.Name ? ActiveCell.Address

Mặc dù việc theo dõi các loại lỗi này có thể là một thách thức, nhưng ánh sáng ở cuối đường hầm là bạn sẽ kết thúc với macro “RunAll” hoạt động hoàn hảo có thể giúp bạn tiết kiệm rất nhiều thời gian.

_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 (12710) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365.