Excelmacros,每天添加新的工作表

所以我试图在Excel中创build一个日常的食物日记,我知道我想要做什么,我只是在努力实现所说的想法。
我创build了一个我希望用户每天都进入的模板,但是我不希望用户每天都必须创build一个新的工作表才能实现这一点,我想创build一个一旦Excel已经运行的macros打开并检查最后一张input表格的填写date,如果当前date较less,则创build一个新的工作表并显示要填写的表格。

这是我迄今为止所发现和尝试的,但是没有做任何事情,并且出现了错误。

Private Sub Workbook_Open() Dim sh As Worksheet Dim shName As String 'name of the sheet template shName = "Food Diary.xltm" 'Insert sheet template With ThisWorkbook If .Range("A1") < Date Then .Range("A1") = Date Set sh = Sheets.Add(Type:=Application.TemplatesPath & shName, _ after:=.Sheets(.Sheets.Count)) 'Give the sheet a name, today's date in this example On Error Resume Next sh.Name = "Day" & " " & Worksheets.Count If Err.Number > 0 Then MsgBox "Change the name of Sheet : " & sh.Name & " manually" Err.Clear End If On Error GoTo 0 End If End With End Sub 

希望你能看到我试图用这个来实现。
如果今天的date大于表单中的最新date,请创build一个名为Day [张数]的新date,我不确定date事件,就好像dateinput到“A1”中一样,一天过去工作簿打开时不更新?

我还发现,一旦创build新的表单,似乎就隐藏了一张表单,这是相当不错的,只有当前表单显示,而其他表单应该仍然可以通过每按一次button后,每一个button滚动,我想我可以做的button编码,但我不知道有关的床单的可见性,以及是否我可以隐藏他们隐藏一次,任何帮助也会很好。

问题是在添加新工作表之前,您正在分配给A1。 所以,你写的是ActiveSheet ,而不是你想创build的表单(尚未创build!)。

像这样,如果我理解正确。 应查询活动工作表范围A1,比较今天的date,并添加新工作表,隐藏旧工作表等。

 Private Sub Workbook_Open() Dim thisSheet as Sheet Dim sh As Worksheet Dim shName As String 'name of the sheet template shName = "Food Diary.xltm" '#### I like to use variables for worksheets: Set thisSheet = ThisWorkbook.ActiveSheet 'Insert sheet template With thisSheet If .Range("A1") < Date Then Set sh = Sheets.Add(Type:=Application.TemplatesPath & shName, _ after:=.Sheets(.Sheets.Count)) '#### Put today's date in the new sheet: sh.Range("A1") = Date 'Give the sheet a name, today's date in this example On Error Resume Next sh.Name = "Day " & Worksheets.Count If Err.Number > 0 Then MsgBox "Change the name of Sheet : " & sh.Name & " manually" Err.Clear End If On Error GoTo 0 '#### Hide the old sheet .Visible = xlSheetHidden End If End With End Sub