Переименование нескольких рабочих листов в рабочей книге со значением «Дата» в ячейке B3 - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь переименовать несколько листов рабочей книги с именами по умолчанию «Лист1 (1), Лист1 (2), Лист1 (3), ...» на значение даты в ячейке «В3»). «каждого конкретного листа. Я хочу закончить с именами листа дат, которые находятся в их отдельных ячейках "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 ]

1 голос
/ 04 июля 2019

Обратите внимание, что вы смешиваете Sheets и Worksheets.Это не то же самое!

Хотя 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 вернет числовое значение даты вместо отформатированной даты.

0 голосов
/ 04 июля 2019

Попробуйте:

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 символа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...