更改具有动态日期的 sheet 的名称

Change the name of the sheet having a dynamic date

我想复制一个 sheet,它的动态 sheet 名称包含今天的日期。但是,我面临命名新的重复 sheet。我输入什么而不是最后一行?

Sub Duplicate()

  ' Duplicate Macro
  ' duplication of OIP sheet

      Dim myDate
      myDate = Date
      Dim LValue As String
      LValue = "OIP " & Format(myDate, "mm.dd.yyyy")


      Sheets(LValue).Select
      Sheets(LValue).Copy Before:=Sheets(7)
      Sheets(LValue (2)).Name = "Advanced Filters"

      End Sub

您知道 sheet 副本的位置,因此您不需要使用其名称:

  Dim LValue As String
  LValue = "OIP " & Format(Date, "mm.dd.yyyy")


  Sheets(LValue).Copy Before:=Sheets(7)
  Sheets(6).Name = "Advanced Filters"

最好将日期添加到“高级过滤器”工作表中,使其与原始工作表的命名约定一致。

假设您设法创建了“高级过滤器”工作表,您稍后将如何在代码中引用它?

这需要一些额外的时间,但您应该创建 return 工作表名称的函数和 return 对它们的引用的函数。前期所做的工作将在长期 运行.

中得到回报

用法

Dim TodaysOIPAdvancedFilters As Worksheet
Set TodaysOIPAdvancedFilters = OIPAdvancedFiltersWorksheetByDate(Date, True)

重构代码

Sub Duplicate()
    OIPAdvancedFiltersWorksheetByDate Date, True
End Sub

Public Function OIPWorksheetByDate(DateOf As Date) As Worksheet
    On Error Resume Next
    Set OIPWorksheetByDate = ThisWorkbook.Worksheets(OIPWorksheetName(DateOf))
    On Error GoTo 0
End Function

Public Function OIPAdvancedFiltersWorksheetByDate(DateOf As Date, Optional CreateIfNotExists As Boolean) As Worksheet
    On Error Resume Next
    Set OIPAdvancedFiltersWorksheetByDate = ThisWorkbook.Worksheets(OIPAdvancedFiltersWorksheetName(DateOf))
    On Error GoTo 0
    If OIPAdvancedFiltersWorksheetByDate Is Nothing And CreateIfNotExists Then
        Dim SourceWorksheet As Worksheet
        Set SourceWorksheet = OIPWorksheetByDate(DateOf)
        
        If SourceWorksheet Is Nothing Then
            MsgBox "OIP Worksheet for " & DateOf & " not found", vbCritical, "Action Cancelled"
            Exit Function
        End If
        On Error Resume Next
        SourceWorksheet.Copy Before:=SourceWorksheet
        ThisWorkbook.Worksheets(SourceWorksheet.Index - 1).Name = OIPAdvancedFiltersWorksheetName(DateOf)
        Set OIPAdvancedFiltersWorksheetByDate = ThisWorkbook.Worksheets(SourceWorksheet.Index - 1)
        On Error GoTo 0
    End If
End Function

Private Function OIPWorksheetName(DateOf As Date) As String
    Const DateFormat As String = "\O\I\P mm.dd.yyyy"
    OIPWorksheetName = Format(DateOf, DateFormat)
End Function

Private Function OIPAdvancedFiltersWorksheetName(DateOf As Date) As String
    Const DateFormat As String = "\O\I\P mm.dd.yyyy \A\d\v\a\n\c\e\d \F\i\l\t\e\r\s"
    OIPAdvancedFiltersWorksheetName = Format(DateOf, DateFormat)
End Function

附录

使用此子比较直接 window:

中的工作表名称
Sub CompareNames()
    Const DateFormat As String = "\O\I\P mm.dd.yyyy"
    Debug.Print "["; ActiveSheet.Name; "]"
    Debug.Print "["; Format(#11/10/2020#, DateFormat); "]"
End Sub

检查额外的空格并确保 OIP 中的 I 不是 L。