用单元格B3中的“日期”值重命名工作簿中的多个工作表

时间:2019-07-04 11:19:33

标签: excel vba

我试图将工作簿的多个工作表从其默认名称“ Sheet1(1),Sheet1(2),Sheet1(3)...”重命名为单元格“ B3”中的日期值”。我想最后给出它们各自的“ B3”单元格中日期的工作表名称。任何工作表中都没有重复的日期。例如,每个工作表的单元格“ B3”中的日期格式为14-Mar-2001。这是我要使用的宏,但它给了我

  

运行时错误'1004'

Sub RenameTabs()
    For x = 1 To Sheets.Count
        If Worksheets(x).Range("B3").Value <> "" Then
            Sheets(x).Name = Worksheets(x).Range("B3").Value
        End If
    Next
End Sub

我能得到的任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

请注意,您混合使用了SheetsWorksheets。这不一样!

虽然Sheets可以包含工作表和图表对象,但是Worksheets仅包含工作表。因此,可能存在8个工作表(5个工作表和3个图表)。因此,将所有Sheets更改为Worksheets

此外,您还需要确保工作表名称的长度不超过31个字符,因为这是Excel的限制。

Option Explicit 

Public Sub RenameTabs()
    Dim x As Long
    For x = 1 To Worksheets.Count
        If Worksheets(x).Range("B3").Value <> "" Then
            Worksheets(x).Name = Left$(Worksheets(x).Range("B3").Value, 31)
        End If
    Next
End Sub

如果单元格B3是真实日期,则应使用Format$()或将其更改为Worksheets(x).Range("B3").Text,否则.Value将返回日期的数字值而不是格式化的日期

答案 1 :(得分:0)

尝试:

Option Explicit

Sub test()

    Dim ws As Worksheet

    With ThisWorkbook

        'Loop worksheets
        For Each ws In .Worksheets

            With ws
                'Check ws b3 value
                If .Range("B3").Value <> "" Then
                    'set ws name
                    ws.Name = .Range("B3").Value
                End If

            End With

        Next ws

    End With

End Sub

注意

请记住,工作表名称最多可以包含31个字符