所以我需要一个宏代码来命名工作表,并在其上设置下一个日期,如前一个工作表被称为Tue 27,那么下一个工作表(新工作表)应该是星期三28,
我当前的代码只将其命名为TODAYS日期,这就是我正在使用的
Dim szTodayDate As String
szTodayDate = Format(Date, "ddd") & Format(Date, " dd")
On Error GoTo MakeSheet
Sheets(szTodayDate).Activate
Exit Sub
MakeSheet:
Dim Srt As Worksheet
Set Srt = ActiveSheet
Sheets.Add
ActiveSheet.Name = szTodayDate
是否有可能这样做,如果是这样,任何人都可以告诉我如何,谢谢
附加说明:所以宏每次运行时都会创建一个新工作表,然后用今天的日期命名,我需要用相对于前一个工作表的NEXT日期命名。因此,如果最后一张表(在宏运行之前)被称为“Sun 02”,那么宏应该创建一张表并将其命名为“Mon 03”,假设现在月份没关系,我将不会运行此宏月份结束,所以在工作簿2月,“Wed 28”将是我最后一次运行这个宏。
原因解释:所以我需要每天为工作创建一个新的工作表,但有时我最终必须在一天之后制作工作表,所以让我们说太阳02我按时制作工作表,所以现在我有工作表sun 02,但是我在星期一错过了,然后在星期二我制作了这张纸,它最终制作了Sheet Tue 04,所以现在我错过了Mon 03。
可能的替代:如果我可以以某种方式设置一个IF函数,可以检查是否存在具有昨天名称的工作表(可能会回到最多2天),如果没有创建它,那将是有效的。但不知道如何编写所谓的IF功能(它还需要创建它并将其命名为今天,如果今天是01)。
再次感谢你
以下代码的一个重要注意事项:在默认状态下,它要求Sheet Names包含Month,因此格式为"ddd dd mmm"
(“Wed 28 Feb”)而不是"ddd dd"
(“Wed 28”)。例如,如果月份存储在FileName中,那么您将需要修改代码。
我们需要一个变量来存储找到的最新日期,以及一个要在qazxswpoi循环中使用的Worksheet对象。我们将检查每个工作表的For Each
并检查它是否为Name
。如果是,那么我们将看到它是否晚于我们当前存储的日期。这将在年底失败,除非您开始在工作表名称(或文件名)中包含年份。 (因为IsDate
来自1 Jan
)
31 Dec
尝试使用下面的,您可以使用计数器而不是1。
Dim dMaxDate AS Date, wsForLoop AS Worksheet, sTestString AS String
dMaxDate = DateSerial(1900,1,0) 'Default to 0
For Each wsForLoop In ThisWorkbook.Worksheets 'Loop through every worksheet
sTestString = wsForLoop.Name 'Get the name of the sheet
If InStr(sTestString, " ") > 0 Then sTestString = Mid(sTestString, 1+InStr(sTestString, " ")) 'Remove the Weekday
'If you need to add the Month/Year from your filename, do that here
If IsDate(sTestString) Then 'Only check Worksheets with Dates for Names
If cDate(sTestString) > dMaxDate Then dMaxDate = cDate(sTestString) 'If this is a later date then store it
End If
Next wsForLoop 'Return to start of loop
If dMaxDate < DateSerial(1900, 1, 1) Then dMaxDate = Now-1 'If we have no Worksheets with Dates for Names then default to yesterday
With ThisWorkbook.Worksheets.Add 'Add a new sheet
'Change the Format if you are adding the Month and/or Year from Filename
.Name = Format(dMaxDate+1, "ddd d mmm") 'And Name it the day after our stored date
End With