最后保存date在Excel工作表页脚

我正在使用具有多张工作表的Excel 2007。 我需要有工作表上次保存的date – 页脚。 我能够find以下内容:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets With ws.PageSetup .LeftFooter = "Last Save Time: &T" .RightFooter = "Last Save Date: &D" End With Next ws Set ws = Nothing End Sub 

这改变了每个工作表。 我只需要它就可以更改已编辑的工作表(因此每个工作表可以有不同的date)。 这甚至有可能吗? 我应该使用单元而不是页脚? 或者我必须创build多个工作簿?

谢谢!

正如Remnant所build议的,最好的方法是使用Worksheet_Change事件。 这意味着,你需要这个VBA代码

 Private Sub Worksheet_Change(ByVal Target As Range) With Me.PageSetup .LeftFooter = "Last Change Time: " & Format(VBA.Time, "hh:mm:ss") .RightFooter = "Last Change Date: " & Format(VBA.Date, "dd/mm/yy") End With End Sub 

在每个工作表中。 只有在更改单元格内容时才会引发此事件,而不是在更改选定内容时发生,因此可能是您想要的。

Remnant还写道,如果你有很多工作表,这将是一个“痛苦的设置”。 我认为这取决于你所说的“多”。 对于最多20〜40张工作表,上面的代码可以在几分钟内轻松地手动复制到每张纸上。

如果你已经有一个工作簿和很多(比如说多于40张),那么以编程方式添加代码可能是一个好主意。 添加一个单独的模块到您的工作簿,包含此代码,并运行一次:

 Option Explicit Sub InsertCode() Dim VBProj As Object Dim VBComp As Object Dim CodeMod As Object Dim sh As Worksheet Dim LineNum As Long Set VBProj = ActiveWorkbook.VBProject For Each sh In ThisWorkbook.Sheets Set VBComp = VBProj.vbcomponents(sh.Name) Set CodeMod = VBComp.CodeModule With CodeMod .DeleteLines 1, .CountOfLines LineNum = .CreateEventProc("Change", "Worksheet") LineNum = LineNum + 1 .InsertLines LineNum, "Me.Pagesetup.LeftFooter = ""Last Change Time: "" & Format(VBA.Time, ""hh:mm:ss"")" .InsertLines LineNum + 1, "Me.Pagesetup.RightFooter = ""Last Change Date: "" & Format(VBA.Date, ""dd/mm/yy"")" End With Next End Sub 

这会将上面的“Worksheet_Change”事件添加到每个工作表的代码部分。

它修改每个工作表的原因是因为您正在执行“ThisWorkbook.Worksheets中的每个WS”。 改变这一点,只find你想修改的工作表,你会很好去。

例如,如果您没有对要修改的工作表的引用,请保留“For Each”循环,但不要修改每个循环,而是在工作表上检查它是否是您想要的。 如果是,请修改页脚。 否则,忽略它。

一个选项可能是每次更改工作表时更新页脚。 这将意味着单独的表单将有不同的date/时间取决于更新时间。

 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) With Sh.PageSetup .LeftFooter = "Last Save Time: " & Format(VBA.Time, "hh:mm:ss") .RightFooter = "Last Save Date: " & Format(VBA.Date, "dd/mm/yy") End With End Sub 

用户可以正常保存工作簿。

这是否让你有什么你需要的?