Lưu các thay đổi không tồn tại (Microsoft Excel)
Bạn có thể đã xảy ra trường hợp này: Bạn mở một sổ làm việc, xem xét một số trang tính, sau đó đóng sổ làm việc. Như một phần của quá trình đóng, Excel hỏi bạn có muốn lưu các thay đổi của mình hay không nhưng bạn không thực hiện bất kỳ thay đổi nào — bạn chỉ quan sát xung quanh. Đưa cái gì?
Trong nội bộ, Excel duy trì cái thường được gọi là “cờ bẩn”. Cờ này được đặt bất cứ khi nào bạn thực hiện một số loại thay đổi đối với sổ làm việc.
Bất cứ khi nào bạn lưu sổ làm việc, cờ sẽ bị xóa. Nếu cờ được đặt khi bạn đóng sổ làm việc, Excel sẽ hỏi bạn có muốn lưu sổ làm việc hay không.
Cờ bẩn rõ ràng có thể được thiết lập nếu bạn thực hiện một số thay đổi rõ ràng đối với sổ làm việc, chẳng hạn như chỉnh sửa ô hoặc sửa đổi cấu trúc của sổ làm việc theo một cách nào đó. Tuy nhiên, nó cũng có thể được thiết lập ngay cả khi bạn không làm bất cứ điều gì rõ ràng. Đôi khi, Excel làm điều gì đó ảnh hưởng đến nội dung của sổ làm việc chỉ vì thực tế bạn đã mở nó. Điều này đặt cờ bẩn và do đó kích hoạt yêu cầu về việc lưu.
Hai thủ phạm lớn trong việc thực hiện các thay đổi tự động như vậy là hàm trang tính HÔM NAY và NGAY BÂY GIỜ. Chúng trả về ngày hệ thống và giờ hệ thống, tương ứng. Khi bạn mở một sổ làm việc lần đầu tiên, chúng sẽ được cập nhật trong quá trình tính toán lại bình thường. Vì chúng đại diện cho một sự thay đổi, Excel sẽ đặt cờ bẩn.
Cờ bẩn cũng có thể được đặt tự động nếu sổ làm việc của bạn bao gồm các liên kết đến dữ liệu trên các trang tính khác. Excel truy xuất dữ liệu, thể hiện sự thay đổi đối với sổ làm việc bạn vừa mở. Excel không đặt cờ bẩn nếu bạn chỉ điều hướng xung quanh sổ làm việc, thực hiện những việc như chọn ô hoặc thay đổi sang một trang tính khác.
Tất nhiên, một cách bạn có thể giải quyết vấn đề là xóa bất kỳ thứ gì đang gây ra thay đổi trong sổ làm việc của bạn. Đối với hầu hết mọi người, điều này không thực tế. Bạn cũng có thể thêm macro tự động sẽ chạy ngay trước khi sổ làm việc đóng, chẳng hạn như macro sau, phải là một phần của đối tượng ThisWorkbook:
Private Sub Workbook_BeforeClose(Cancel As Boolean) ActiveWorkbook.Saved = True End Sub
Macro này không làm gì khác hơn là xóa cờ bẩn (thuộc tính Đã lưu). Mặc dù cách tiếp cận này sẽ hiệu quả, nhưng có một rủi ro rất lớn vốn có khi sử dụng nó. Với macro tại chỗ, Excel sẽ không bao giờ hỏi bạn có muốn lưu các thay đổi khi thoát hay không, ngay cả khi các thay đổi hợp pháp đã được thực hiện đối với sổ làm việc. Do đó, bạn cần nhớ lưu rõ ràng mọi thứ trong sổ làm việc bất cứ khi nào bạn thực hiện thay đổi. Nếu không, bạn có thể mất một số công việc của mình.
Một biến thể của cách tiếp cận này – một biến thể ít xảy ra hơn đối với những thay đổi bị lãng quên – là thực sự tạo thành phần vĩ mô của thủ tục Workbook_Open cho đối tượng ThisWorkbook:
Private Sub Workbook_Open() ActiveWorkbook.Saved = True End Sub
Bây giờ, Excel mở sổ làm việc, tính toán lại (bao gồm thực hiện các thay đổi dựa trên các hàm như HÔM NAY và NGAY BÂY GIỜ), rồi xóa cờ bẩn. Nếu bạn đóng ngay lập tức, bạn sẽ không được hỏi có muốn lưu các thay đổi của mình hay không. Tuy nhiên, bạn sẽ được hỏi xem có muốn lưu các thay đổi hay không, nếu bạn thực hiện các thay đổi sau khi macro này chạy — nói cách khác, sau khi trang tính được mở hoàn toàn.
Bên cạnh việc tự động tính toán lại các chức năng đặt cờ bẩn, cũng có thể sổ làm việc của bạn chứa một hoặc hai macro tự động chạy khi bạn mở nó. Nếu macro đang thực hiện một số loại thay đổi trong sổ làm việc, thì tự nhiên nó sẽ đặt cờ bẩn. Bạn có thể kiểm tra VBA Editor để xem có đúng như vậy không.
_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 (2081) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm 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: