我尝试创建一个 Excel 模板,该模板包含三个字段,我希望它们在打开时自动更新。
此模板将包含的字段
- 当前日期:2012 年 2 月 7 日
- 页数:25
- 日期:2012 年 2 月 7 日至 2012 年 2 月 8 日
当我在 2012 年 3 月 8 日之后打开此模板时,此工作表将包含新数据
- 当前日期:2012 年 3 月 8 日
- 页数:26
- 日期:2012 年 3 月 8 日至 2012 年 2 月 9 日
对于当前日期
Private Sub Workbook_Open()
ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = Date
End Sub
可以使用 Excel 函数来完成此操作吗?还是我需要使用 VB,以及如何使用新值自动更新模板以便下次使用这些日期。
答案1
有几种方法可以实现这一点。
最简单的假设是开始和结束日期是一致的。
- “介于”日期应位于两个单元格中。“开始”日期设置为当前月 2 日
=DATE(YEAR( NOW() ), MONTH( NOW() ), 2)
,“结束”日期设置为当前月 2 日 +1=DATE(YEAR( NOW() ), MONTH( NOW() ) +1, 2)
- 然后将“当前”日期简单地设置为“开始”日期。
但是,您需要在保存电子表格时“修复”这些日期。假设“当前”日期在单元格 B3 中,而日期之间的 2 个日期在单元格 中。您可以使用类似以下方法:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Range("B3").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Range("B5:C5").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
End Sub
在ThisWorkbook
代码模块中。这只是在单元格上复制/粘贴值,以便公式被日期替换。
哎呀,需要添加一项。我给出的代码有点过于简单,因为您无法保存模板,所以您需要将给定的代码包装在某种东西中,以防止它在编辑模板本身时触发。可能最简单的方法是使用文件命名约定。也许模板在文件名开头有文本“TEMPLATE”。