Forum Discussion

itzme218's avatar
itzme218
Copper Contributor
Apr 21, 2020

Macro to Rename worksheet based on certeria

I was able to find this code below, but instead of renaming to the string in cell B5, I want to search Column A for the row that contains word "total", then rename the Worksheet to the text string coming after words "Total for". Any ideas how I can accomplish this? TIA

Sub RenameSheet()
Dim rs As Worksheet
For Each rs In Sheets
rs.Name = rs.Range("B5")
Next rs
End Sub

 

2 Replies

  • itzme218 there are some drawbacks you should think about when coding something like this. Off the top of my head, let me list the potential errors:

    • You may not find the value you're looking for where you're looking for it
    • The sheet name may already exist
    • You may have illegal characters for the desired sheet name
    • Duplicate sheet names may arise

    While these are able to be mitigated, the onus is on you to answer them.

     

    The below code will do what you want. It's not bulletproof.

     

    Public Sub RenameWorksheets()
    
        Dim Sheet As Worksheet
        Dim FoundCell As Range
        Dim SheetName As String
        
        For Each Sheet In ThisWorkbook.Worksheets
            
            On Error Resume Next
            Set FoundCell = Sheet.Range("A:A").Find(What:="Total for*", LookAt:=xlPart)
            On Error GoTo 0
            
            If Not FoundCell Is Nothing Then
                SheetName = Left(Replace(FoundCell.Value, "Total for ", ""), 31)
                If Not WorksheetExists(SheetName, ThisWorkbook) Then
                    Sheet.Name = SheetName
                End If
                Set FoundCell = Nothing
            End If
            
        Next Sheet
    
    End Sub
    
    
    Function WorksheetExists( _
             ByVal SheetName As String, _
             Optional TargetBook As Workbook _
             ) As Boolean
    
        If TargetBook Is Nothing Then
            If ActiveWorkbook Is Nothing Then Exit Function
            Set TargetBook = ActiveWorkbook
        End If
        On Error Resume Next
        WorksheetExists = CBool(Len(TargetBook.Worksheets(SheetName).Name) <> 0)
        On Error GoTo 0
    
    End Function

     

    HTH

    • itzme218's avatar
      itzme218
      Copper Contributor

      Zack Barressethank you for the pointers. I was able to get the code to work! You even thought about to included maximum 31 characters for worksheet name. Many thanks for your help Zack Barresse