查找工作表的最新副本,例如工作表(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