上次保存日期在excel工作表页脚中

| 我将Excel 2007与具有许多工作表的工作簿一起使用。我需要在页脚中有上次保存工作表的日期。我能够找到以下内容:
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
这将更改每个工作表。我只需要更改已编辑的工作表(因此每个工作表可以有不同的日期)。 这有可能吗?我应该使用单元格而不是页脚吗?还是我必须创建多个工作簿? 谢谢!     
已邀请:
正如残余建议的那样,最好的方法是利用ѭ1事件。这意味着,您需要此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”。更改该内容以仅找到您要修改的工作表,您将很容易进行。 例如,如果您没有要修改的工作表的引用,请保留“ For Each”循环,但不要修改每个循环,而应在工作表上进行检查以查看它是否是您想要的。如果是,请修改页脚。否则,请忽略它。     
一种选择是每次更改工作表时更新页脚。这意味着各个工作表将具有不同的日期/时间,具体取决于它们的更新时间。
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
然后,用户可以照常保存工作簿。 这是否满足您的需求?     

要回复问题请先登录注册