Khi bạn viết một macro, nó được thiết kế để chạy bất cứ khi nào bạn chọn chạy nó. Điều gì sẽ xảy ra nếu bạn cần phát triển một macro sẽ chạy bất cứ khi nào có điều gì đó thay đổi trong trang tính của bạn? Nếu bạn muốn macro chạy tự động thì sao? Điều này đặc biệt cần thiết nếu bạn đang tạo một hàm tùy chỉnh mà bạn muốn sử dụng trong các ô của trang tính.

Đây là lúc mà phương pháp Biến động có ích. Tất cả những gì bạn cần làm là đưa câu lệnh sau vào macro của bạn:

Application.Volatile

Điều này thông báo cho Excel biết rằng kết quả của macro phụ thuộc vào các giá trị trong trang tính và nó sẽ được thực thi bất cứ khi nào trang tính được tính toán lại. Ví dụ: hãy xem xét hàm do người dùng định nghĩa sau:

Function CountCells(MyRange As Range)

Dim iCount As Integer     iCount = 0     For Each cell In MyRange         If cell.HasFormula Then             iCount = iCount + 1         End If     Next cell     CountCells = iCount End Function

Hàm này, nếu được sử dụng trong một ô, sẽ đếm số ô có chứa công thức trong một phạm vi xác định. Tuy nhiên, hàm sẽ chỉ chạy lần đầu tiên nó được nhập vào một ô hoặc bất cứ khi nào ô chứa công thức được chỉnh sửa. Nếu bạn muốn hàm tính toán lại mỗi khi trang tính được tính toán lại, bạn sẽ thêm phương thức Volatile ở gần đầu hàm:

Function CountCells(MyRange As Range)

Dim iCount As Integer     Application.Volatile     iCount = 0     For Each cell In MyRange         If cell.HasFormula Then             iCount = iCount + 1         End If     Next cell     CountCells = iCount End Function

Việc bao gồm phương thức Application.Volatile có nghĩa là mỗi khi trang tính được tính toán lại, hàm (macro) này lại được chạy.

_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 (2013) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: