如果查看工作簿中存储的属性,您会注意到Excel维护了大量有关该文件的信息。其中一项是日期和时间,简称为“已修改”。许多人将其称为“上次修改”日期,但这确实反映了工作簿的上次保存时间。

如果要在工作簿中使用此日期(也许在页眉或页脚中),则可以使用BuiltinDocumentProperties属性(这听起来似乎很多余)来使用。以下宏会将正确的日期添加到文档的标题中:

Sub MyHeader1()

Dim sLMD As String

On Error Resume Next

sLMD = ActiveWorkbook.BuiltinDocumentProperties("Last Save Time")

If Err = 440 Then         Err = 0         sLMD = "Not Set"

End If     sLMD = Left(sLMD, 8)

ActiveSheet.PageSetup.LeftHeader = "Last Saved: " & sLMD End Sub

在此宏中有很多项目要注意。首先,它尝试确定工作簿的最后保存日期。如果无法确定该信息,则将标头设置为“未设置”。

请注意,此宏中完成了一些错误处理。原因是,如果未设置特定的文档属性(在这种情况下为BuiltinDocumentProperties),则Excel将返回错误。该错误需要被拦截和处理,在此完成。

这里还有另外一个要注意的项目。在某些版本的Excel中,如果未设置该属性,则返回的Err值不是真正的440(如此处所示),而是其他一些奇数,例如-2147467259。确实,这很奇怪。为什么使用440值(这是正确的错误代码)

我不知道会在一种情况下返回,而在另一种情况下不会返回。

(也许其他一些Excel专家会知道答案。)如果遇到此问题,可以采用两种方法。首先,您可以将440值替换为另一个值(-2147467259)。第二个选项(假设您已经至少保存了工作簿一次)是使用其他宏。以下内容从文件本身读取“最后修改”属性,并将该信息存储在标题中:

Sub MyHeader2()

Dim fs As Variant     Dim f As Variant     Dim sLMD As String

Set fs = CreateObject("Scripting.FileSystemObject")

Set f = fs.GetFile(ActiveWorkbook.Path & "\" & _       ActiveWorkbook.Name)

sLMD = Left(f.DateLastModified, 8)

ActiveSheet.PageSetup.LeftHeader = "Last Modified: " & sLMD End Sub

无论使用哪个宏,请记住,宏一旦运行,将把左标题设置为所需的信息。该信息将不会再次更改,直到您再次运行宏。因此,如果您始终要在标题中输入最新日期,则应该定期运行宏(可能就在打印之前),或者将其设置为在打开文档时运行。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(7764)适用于Microsoft Excel 2007、2010和2013。您可以在此处为Excel的较早菜单界面找到此技巧的版本: