我正在使用带有多张工作表的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
这会更改每个工作表。我需要它只更改已编辑的工作表(因此每个工作表可以有不同的日期)。 这甚至可能吗?我应该使用单元格而不是页脚吗?或者我是否必须创建多个工作簿?
谢谢!
答案 0 :(得分:2)
正如Remnant所说,最好的方法是利用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”事件添加到每张表的代码部分。
答案 1 :(得分:1)
它修改每个工作表的原因是因为你在“ThisWorkbook.Worksheets中为每个WS做”。改变它只是找到你想要修改的工作表,你会很高兴。
例如,如果您没有对要修改的工作表的引用,请保留For Each循环,但不要修改每个循环,请检查工作表以查看它是否是您想要的。如果是,请修改页脚。否则,请忽略它。
答案 2 :(得分:1)
一个选项可能是每次更改工作表时更新页脚。这将意味着单个工作表将根据更新时间而具有不同的日期/时间。
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
然后,用户可以正常保存工作簿。
这会诅咒你所需要的吗?