所以我试图在Excel中创建一种日常食物日记,我知道我想要它做什么,我只是在努力实现这些想法...
我创建了一个模板,我希望用户每天都进入,但我不希望用户每天必须创建一个新的工作表来实现这一点,我想创建一个将在Excel运行后运行的宏打开并检查填写最后一个条目表的日期,如果它小于当前日期,则创建一个新工作表并显示要填写的工作表!
这是我迄今为止所发现和尝试的内容,但它没有做任何事情并且出现错误。
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
希望你能看到我想要实现的目标 如果今天的日期大于工作表中的最新日期,请创建一个名为Day [页数]的新日期,我不确定日期是什么,好像日期输入“A1”并且一天过去了打开工作簿时不更新?
我还发现一些东西似乎是关于隐藏一张新的一张纸后的东西,这是非常好的东西,只有当天的纸张展示会很好,但其他的应该仍然是通过每次按下后滚动浏览每个按钮的按钮可以访问,我想我将能够进行按钮编码,但我不确定纸张的可见性以及我是否能够隐藏它们一旦隐藏,任何帮助这也很棒。
答案 0 :(得分:1)
在添加新工作表之前,问题是您要分配给A1。所以,您要写入ActiveSheet
,而不是要创建的工作表(尚未创建!)。
如果我理解正确的话。应查询活动工作表范围A1,与今天的日期进行比较,并添加新工作表,隐藏旧工作表等。
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