更改具有动态日期的 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。
我想复制一个 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。