Excel VBA添加每周工作表?
scheme:我有一个Excel表单,它具有(自动生成的)date列表(每个月除周末外)。
这些date在单元格A2:A32
和单元格B2:B32
和C2:32
有一些额外的细节(这不是很重要)。
我也有一个macros,当我点击一个命令button时激活。 macros使用这些date为每个date创build一个新工作表。
macros:
Private Sub CommandButton2_Click() Dim rng As Range Set rng = Sheets("Sheet1").Range("A2:A32") Dim wks As Worksheet For Each cell In rng On Error Resume Next If cell.Value <> "" Then Set wks = Sheets.Add(After:=Worksheets(Worksheets.Count), Type:="C:\Users\User1\Desktop\1.xltx") wks.Name = cell.Value wks.Range("B2").Value = cell.Offset(0, 1).Value wks.Range("B3").Value = cell.Offset(0, 2).Value End If Next cell End Sub
问题:如何更改macros,以便在每周五之后,macros制作每周总数(使用另一个模板并命名为week1,week2等)(如果可能)的工作表。
如果有帮助的话,B3单元格会在星期五,星期一等文本中写入星期几。
你需要考虑“ If the day is Friday, it's time to create the weekly sheet"
。
对于一周的序列号,有一个名为WeekNum
的WorksheetFunction
名称空间的WeekNum
,它在input中input一个date,并返回星期数。
在你的代码中说这一切:
For Each cell In rng On Error Resume Next If cell.Value <> "" Then Set wks = Sheets.Add(After:=Worksheets(Worksheets.Count), Type:="C:\Users\User1\Desktop\1.xltx") wks.Name = cell.Value wks.Range("B2").Value = cell.Offset(0, 1).Value wks.Range("B3").Value = cell.Offset(0, 2).Value If cell.Value = "Friday" '<-- new code Set weekly = Sheets.Add(After:=Worksheets(Worksheets.Count),Type="your template") weekly.Name = "Week" + WorksheetFunction.WeekNum(cell.Value) End If '<-- end new code End If Next cell
Ps更现实的说明。 如果按照我的理解这些是工作日,那么说“如果是星期五然后是每周”是有点冒险的。 如果这周在星期四和星期五结束,是银行假期呢? 而且,你甚至不能认为“如果下一个星期一”,可能会有同样的问题。
因此,不要依赖于Range("B")
,我会检查weeknum:
If WorksheetFunction.WeekNum(cell.Value) < WorksheetFunction.WeekNum(cell.Offset(1,0).Value) Then 'add weekly sheet