查找工作表的最新副本,例如工作表(N)
Find latest copy of Worksheet eg Worksheet(N)
我有一个包含多个作业的工作簿sheet。
sheet 以日期格式命名 dd ddd mmm
。例如,8 月 15 日星期三。可能有许多 sheet 在同一天命名,但最后带有一个简单的 (N),例如。 8 月 15 日星期三 (3)。这些已被 worksheet.count
在早期复制。
我有一个 Range("F3")
用于查找我正在寻找的 sheet。但是,我似乎无法正确地弄清楚如何在其命名系列中找到最后一个 sheet 。例如,8 月 12 日星期三 (3)。
下面的功能和相关的子工作...但只找到命名系列中的第一个,例如 Wed 12 Aug。我需要帮助修改它以找到系列中的最后一个,例如 Wed 12 Aug (3)。工作簿包含许多不同日期的数据。
非常感谢任何帮助。
Function SheetExist(strSheetName As String) As Boolean
Dim i As Integer
For i = 1 To Worksheets.Count
If Worksheets(i).Name = strSheetName Then
SheetExist = True
Exit Function
End If
Next i
End Function
Sub FindlastestUpdate()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Dim Dfind As String
Dfind = Workbooks("Inbound.Control.xlsm").Worksheets("ControlPanel").Range("F3")
Dfind = Format(Dfind, "ddd dd mmm")
If SheetExist(Dfind) Then
Workbooks("Inbound.Control.xlsm").Worksheets(Dfind).Select
Debug.Print "The Sheet Exists"
Else 'What Happends if the sheet dosnt exist
Debug.Print "The Sheet Does NOT Exists"
End If
End Sub
这是一个循环和使用 Split
的示例。根据需要更改工作簿引用。这里使用 Instr
在每个作品 sheet 名称中查找 F3
值。如果存在,则代码会查看该名称是否存在 "("
。如果它这样做,它会在这个和 ")"
上拆分,以提取 sheet 副本中存在的数字。这可以从一些错误处理中获益。提取的数字与 finalNumber
变量进行比较。如果大于,则 finalNumber
设置为提取的数字,依此类推。如果未找到 "("
,则假定所需的最终 sheet 是找到的 sheet,其中没有 "("
,但在 F3
上匹配值。
Option Explicit
Public Sub test()
Dim Dfind As String, ws As Worksheet, number As Long, finalNumber As Long, lastSheet As Worksheet
Dfind = vbNullString
Dfind = Workbooks("Inbound.Control.xlsm").Worksheets("ControlPanel").Range("F3")
Dfind = Format$(Dfind, "ddd dd mmm")
For Each ws In ThisWorkbook.Worksheets '<==change as appropriate
If InStr(ws.Name, Dfind) > 0 Then
If InStr(ws.Name, "(") Then
number = Split(Split(ws.Name, "(")(1), ")")(0)
If number > finalNumber Then
finalNumber = number
Set lastSheet = ws
End If
Else
Set lastSheet = ws
End If
End If
Next
If Not lastSheet Is Nothing Then Debug.Print lastSheet.Name
End Sub
我有一个包含多个作业的工作簿sheet。
sheet 以日期格式命名 dd ddd mmm
。例如,8 月 15 日星期三。可能有许多 sheet 在同一天命名,但最后带有一个简单的 (N),例如。 8 月 15 日星期三 (3)。这些已被 worksheet.count
在早期复制。
我有一个 Range("F3")
用于查找我正在寻找的 sheet。但是,我似乎无法正确地弄清楚如何在其命名系列中找到最后一个 sheet 。例如,8 月 12 日星期三 (3)。
下面的功能和相关的子工作...但只找到命名系列中的第一个,例如 Wed 12 Aug。我需要帮助修改它以找到系列中的最后一个,例如 Wed 12 Aug (3)。工作簿包含许多不同日期的数据。
非常感谢任何帮助。
Function SheetExist(strSheetName As String) As Boolean
Dim i As Integer
For i = 1 To Worksheets.Count
If Worksheets(i).Name = strSheetName Then
SheetExist = True
Exit Function
End If
Next i
End Function
Sub FindlastestUpdate()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Dim Dfind As String
Dfind = Workbooks("Inbound.Control.xlsm").Worksheets("ControlPanel").Range("F3")
Dfind = Format(Dfind, "ddd dd mmm")
If SheetExist(Dfind) Then
Workbooks("Inbound.Control.xlsm").Worksheets(Dfind).Select
Debug.Print "The Sheet Exists"
Else 'What Happends if the sheet dosnt exist
Debug.Print "The Sheet Does NOT Exists"
End If
End Sub
这是一个循环和使用 Split
的示例。根据需要更改工作簿引用。这里使用 Instr
在每个作品 sheet 名称中查找 F3
值。如果存在,则代码会查看该名称是否存在 "("
。如果它这样做,它会在这个和 ")"
上拆分,以提取 sheet 副本中存在的数字。这可以从一些错误处理中获益。提取的数字与 finalNumber
变量进行比较。如果大于,则 finalNumber
设置为提取的数字,依此类推。如果未找到 "("
,则假定所需的最终 sheet 是找到的 sheet,其中没有 "("
,但在 F3
上匹配值。
Option Explicit
Public Sub test()
Dim Dfind As String, ws As Worksheet, number As Long, finalNumber As Long, lastSheet As Worksheet
Dfind = vbNullString
Dfind = Workbooks("Inbound.Control.xlsm").Worksheets("ControlPanel").Range("F3")
Dfind = Format$(Dfind, "ddd dd mmm")
For Each ws In ThisWorkbook.Worksheets '<==change as appropriate
If InStr(ws.Name, Dfind) > 0 Then
If InStr(ws.Name, "(") Then
number = Split(Split(ws.Name, "(")(1), ")")(0)
If number > finalNumber Then
finalNumber = number
Set lastSheet = ws
End If
Else
Set lastSheet = ws
End If
End If
Next
If Not lastSheet Is Nothing Then Debug.Print lastSheet.Name
End Sub