首页 文章

使用NEXT日期打开一个新工作表

提问于
浏览
0

所以我需要一个宏代码来命名工作表,并在其上设置下一个日期,如前一个工作表被称为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) .

再次感谢你

2 回答

  • 0

    以下代码的一个重要注意事项:在默认状态下,它要求工作表名称包含月份,因此格式为 "ddd dd mmm" ("Wed 28 Feb")而不是 "ddd dd" ("Wed 28") . 例如,如果将月份存储在FileName中,则需要修改代码 .

    我们需要一个变量来存储找到的最新日期,以及一个要在 For Each 循环中使用的Worksheet对象 . 我们将检查每个工作表的 Name 并检查它是否 IsDate . 如果是,那么我们将看到它是否晚于我们当前存储的日期 . This will fail at year end ,除非您开始在工作表名称(或文件名)中包含年份 . (自 1 Jan 之前 31 Dec

    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
    
  • 0

    尝试使用下面的,您可以使用计数器而不是1 .

    SZTodayDate = Format(Date + 1, "ddd") & Format(Date + 1, " dd")
    

相关问题