Dave có hệ thống Windows XP vẫn có phiên bản cũ của Excel 97 trên đó. Hệ thống đó có một macro được sử dụng để xử lý thông tin trong một trang tính. Nó có thể xử lý 500 hàng thông tin trong khoảng 12 giây. Trên máy mới hơn, chạy Excel 2010 trong Windows 7, macro tương tự hoạt động trên cùng một dữ liệu mất khoảng 3 đến 4 phút để chạy. Cả hai máy đều có cùng dung lượng bộ nhớ (4 Gb) và bộ vi xử lý tương đương nhau. Dave tự hỏi tại sao macro chạy chậm hơn rất nhiều trên phiên bản Excel mới hơn.

Rất khó để đưa ra bất cứ điều gì ngoài nhận xét chung nhất mà không thực sự nhìn thấy mã, nhưng điều đó không có nghĩa là không có gì để nói. :>) Điều đầu tiên bạn cần làm là kiểm tra xem macro của bạn đang hoạt động như thế nào. Ví dụ: nó có bước qua tất cả các hàng của trang tính để thực hiện quá trình xử lý không? (Mặc dù macro đang xử lý 500 hàng thông tin không có nghĩa là nó không đi qua mọi hàng trên trang tính.) Lý do điều này có thể quan trọng là vì các phiên bản Excel trước chỉ sử dụng hơn 65.000 hàng trong một trang tính, ngược lại phiên bản mới nhất có thể xử lý số hàng gấp 16 lần (hơn 1.000.000). Nếu macro của bạn mất 12 giây để chạy trước đó, thì thời gian dài gấp 16 lần sẽ là 192 giây, tức là từ 3 đến 4 phút.

Cũng có báo cáo rằng Excel 2010 giao tiếp khá thường xuyên với trình điều khiển máy in, theo cách không được thực hiện trong các phiên bản Excel trước. Bạn có thể tìm hiểu xem điều này có làm chậm macro của bạn hay không bằng cách tắt giao tiếp khi bắt đầu macro của bạn:

Application.PrintCommunication = False

Ở cuối macro của bạn, hãy nhớ đặt thuộc tính trở lại True để Excel có thể giao tiếp lại với máy in.

Nó cũng có thể là có một cái gì đó khác với máy mới hơn, ngay cả khi sự khác biệt là nhỏ. Ví dụ: máy mới hơn có thể chạy các chương trình nền khác với máy cũ — bất cứ thứ gì từ chương trình chống vi-rút đến phần mềm nhận dạng giọng nói. Ngoài ra, nó có thể có một số tải bổ trợ Excel khác không có trên hệ thống trước đó. Bạn sẽ không nghĩ rằng những thứ như vậy sẽ ảnh hưởng đến hiệu suất macro, nhưng chúng thực sự có thể. Tất nhiên, bạn sẽ không biết cho đến khi bạn theo dõi những gì đang tải, vô hiệu hóa nó và sau đó thử chạy lại macro của bạn.

Ngoài ra, có thể máy mới hơn có một số thiết bị bên ngoài mà nó cần phải thăm dò định kỳ, điều này có thể làm chậm mọi thứ. Tôi có một hệ thống trong văn phòng của mình có ổ cứng ngoài, được kết nối qua cổng USB. Đôi khi, bản thân hệ thống (Windows) cần phải ra ngoài và khởi động ổ đĩa ngoài, và mọi thứ về cơ bản chỉ dừng lại trên máy tính trong khi điều này xảy ra. Các thiết bị có lỗi có thể là tệp đính kèm USB, máy quét, ổ đĩa mạng, v.v. Nó có thể rất khó chịu, đặc biệt là khi nó làm chậm một cái gì đó không mất nhiều thời gian.

Một gợi ý tốt trong trường hợp này là không chỉ dựa vào những gì bạn tìm thấy với một hệ thống Excel 2010 duy nhất. Nếu bạn có quyền truy cập vào một số máy — thậm chí có thể là một số máy ở ngoài văn phòng — hãy thử macro trên chúng để xem điều gì xảy ra. Nếu nó chạy nhanh hơn, thì bạn biết rằng có một cái gì đó không thể nhìn thấy được trên hệ thống 2010 chậm.

Nếu bạn thấy rằng mọi thứ thực sự là “bình đẳng”, thì bạn có thể cần phải vào VB Editor trên hệ thống và bắt đầu thực hiện một số thời gian của các phần khác nhau trong macro của bạn. Điều này thật tẻ nhạt, nhưng nó có thể giúp bạn thu hẹp chính xác nơi mà macro đang sa lầy.

Nếu bạn quyết định đi theo con đường thứ hai này, bạn sẽ thấy xứng đáng khi đầu tư vào một cuốn sách tham khảo của lập trình viên VBA Excel tốt. Có một số trên thị trường, vì vậy hãy mua sắm xung quanh một chút. (Bạn không thể làm sai bất cứ điều gì do John Walkenbach sáng tác, và tôi đã nghe những điều tốt đẹp về Excel 2007 VBA Programmer’s Reference.)

_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 (12440) áp dụng cho Microsoft Excel 2010.