کیمبرلی متعجب است که آیا فرمولی وجود دارد که بتواند از آن برای قرار دادن تاریخ آخرین ذخیره ورک بوک در سلول استفاده کند. حتی اگر او هر روز ورک بوک را باز کند، فقط می خواهد هر بار که می خواهد ذخیره کند، تاریخ به روزرسانی شود.
هیچ فرمولی برای انجام این کار وجود ندارد. اکسل قابلیت بومی را ندارد. با این حال، می توانید یک ماکرو ساده ایجاد کنید که هر زمان که ورک بوک را ذخیره می کنید، مقدار تاریخ را در سلول بچسبانید. این بر اساس رویداد BeforeSave است که به شی ThisWorkbook تعلق دارد:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
Sheets(1).Range("A1").Value = Now()
End Sub
این ماکرو تاریخ را (در واقع مقداری که توسط تابع Now برگردانده شده است) را در سلول A1 اولین کاربرگ ورک بوک قرار می دهد. آن سلول باید در اکسل به هر فرمتی که می خواهید قالب بندی شود. یک اشکال احتمالی برای این ماکرو وجود دارد - اگر از Save As (برای ذخیره ورک بوک با نام دیگری) استفاده کنید و سپس ذخیره را لغو کنید، تاریخ همچنان به روزرسانی می شود زیرا قبل از ذخیره رخ داده است - به این معنی که انجام شده است . درست همانطور که اکسل شروع به ذخیره ورک بوک کرد، نه بعد از اینکه ورک بوک واقعاً ذخیره شد.
لازم به ذکر است که اکسل همچنین شامل یک رویداد AfterSave است که ممکن است وسوسه شوید از آن برای به روز رسانی اطلاعات استفاده کنید. متأسفانه، چند حفره نیز دارد، و چیزی بیش از رویداد BeforeSave ارائه نمی دهد.
اگر ترجیح می دهید، می توانید از یک رویکرد مبتنی بر کلان کمی متفاوت استفاده کنید. این یکی به یک ماکرو معمولی متکی است، نه یک کنترل کننده رویداد:
Function LastModified() As Date
Application.Volatile
LastModified = ThisWorkbook.BuiltinDocumentProperties("Last Save Time")
End Function
در هر سلولی که می خواهید تاریخ ظاهر شود، ماکرو را به این شکل فراخوانی می کنید:
=LastModified()
فرمول تاریخ و زمان آخرین ذخیره ورک بوک را برمی گرداند و می توانید آن را به هر شکلی که می خواهید قالب بندی کنید. از آنجایی که تابع به عنوان فرار ذکر شده است، هر زمان که کاربرگ دوباره محاسبه شود، به طور مداوم به روز می شود.