情景:我有一张Excel工作表,其中包含(自动生成)日期列表(本月的每一天,周末除外)。
这些日期位于单元格x = eval('y = function() {}')
中,单元格A2:A32
和B2:B32
中有一些额外的详细信息(这些信息非常重要)。
我还有一个在单击命令按钮时激活的宏。宏使用这些日期为每个日期创建新工作表。
宏:
C2:32
问题:如何更改宏以便在每个星期五之后,宏会生成每周总计的工作表(使用另一个模板并命名(如果可能)第1周,第2周,等等)。
如果有帮助,单元格B3将以文本(星期五,星期一等)写出星期几。
答案 0 :(得分:2)
您需要考虑“If the day is Friday, it's time to create the weekly sheet"
。
对于一周的序列号,有一个名为WorksheetFunction
的{{1}}命名空间函数,它在输入中记录日期并返回周数。
在你的代码中说出这一切:
WeekNum
P.S。一个更现实的说明。如果据我所知,这些都是工作日,那么说“如果是星期五那么每周”就有点冒险了。如果那周在周四和周五结束是银行假日怎么办?同样,你甚至不能想“如果下一个星期一”,可能会出现同样的问题。
因此,不要依赖于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
上写的内容,我会用周刊进行检查:
Range("B")