Welcome toExcel.Tips.Net
Tips.Net Home
ExcelTips Home
Ask an Excel Question
Make a Comment
ExcelTips FAQ
ExcelTips Premium
Beauty Tips
Car Tips
Cleaning Tips
College Tips
Cooking Tips
Excel2007 Tips
ExcelTips
Family Tips
Gardening Tips
Health Tips
Home Tips
Money Tips
Organizing Tips
Pest Tips
Pet Tips
Wedding Tips
Word2007 Tips
WordTips
Advertise on the
ExcelTips Site
Assigning a Macro to a Keyboard Combination
Hiding Rows Based on a Cell Value
You probably had this happen to you: You open a workbook, look around at some of the worksheets, and then close the workbook. As part of closing, Excel asks you if you want to save your changes, yet you didn't make any changes—you only looked around. What gives?
Internally, Excel maintains what is commonly called a "dirty flag." This flag gets set whenever you do some sort of change to a workbook. Whenever you save the workbook, the flag is cleared. If the flag is set when you close the workbook, Excel asks if you want to save the workbook.
The dirty flag can obviously get set if you make some explicit change to a workbook, such as editing a cell or modifying the structure of the workbook in some way. However, it can also get set even if you don't do anything explicit. Sometimes, Excel does something that affects the contents of the workbook just by virtue of the fact you opened it. This sets the dirty flag and thus triggers the request about saving.
The two biggest culprits in making such automatic changes are the TODAY and NOW worksheet functions. These return the system date and the system time, respectively. When you first open a workbook, they are updated in the normal course of recalculating. Since they represent a change, Excel sets the dirty flag.
One way you can get around this is to, of course, remove any TODAY or NOW functions from your workbook. For most people, this isn't practical. You can also add an automatic macro that will run just before the workbook closes, such as the following, which should be part of the ThisWorkbook object:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.Saved = True
End Sub
This macro does nothing more than clear the dirty flag (the Saved property). While this approach will work, there is a huge risk inherent in using it. With the macro in place, Excel will never ask you if you want to save changes upon exiting, even if legitimate changes were done to the workbook. Thus, you would need to remember to explicitly save anything in the workbook whenever you make changes. If you don't, you may loose some of your work.
A variation on this approach—one that is less unforgiving of forgotten changes—is to actually make the macro part of the Workbook_Open procedure for the ThisWorkbook object:
Private Sub Workbook_Open()
ActiveWorkbook.Saved = True
End Sub
Now, Excel opens the workbook, recalculates (including making changes based on functions such as TODAY and NOW), and then clears the dirty flag. If you close right away, you aren't asked if you want to save your changes. You will be asked if you want to save changes, however, if you make changes after this macro has run—in other words, after the worksheet was fully opened.
Besides automatically recalculating functions that set the dirty flag, it is also possible that your workbook contains a macro or two that automatically run when you open it. If the macro is making some sort of change in the workbook, then it will naturally set the dirty flag. You can check out the VBA Editor to see if this is the case.
ExcelTips is your source for cost-effective Microsoft Excel training. This tip (2081) applies to Microsoft Excel versions: 97 2000 2002 2003 2007
More Power! For some people, the prospect of creating macros can be scary. Those who conquer their fears, however, find they become much more confident and productive once they learn how to make Excel do exactly what they want. ExcelTips: The Macros is an invaluable source for learning Excel macros. You are introduced to the topic in bite-sized chunks, pulled from past issues of ExcelTips. Learn at your own pace, exactly the way you want.