Измените имя вкладок с помощью списка и найдите функцию в VBA

У меня есть список имен в одной книге в столбце b, и мне нужно изменить имя вкладок в другой книге, в которой несколько вкладок.

Эти вкладки имеют то же имя, но не в одном и том же месте на каждом листе. Итак, мне нужно найти имя в книге, используя список, который у меня есть в другой книге в b column.

Есть ли для этого какой-либо код VBA, потому что я не могу найти это конкретное имя в книге, используя Найти в VBA.
Вот код, который я пытаюсь использовать, но не могу получить желаемый результат.

Sub change_Name_1 ()
For i = 1 To Application.Sheets.Count
    Windows("Book2").Activate
    b = Range("B" & i).Value
    Windows("Book1").Activate
    Sheets(i).Select
    Cells.Find(What:=b, After:=ActiveCell, LookIn:=xlValues, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
    ActiveCell.Select
    Application.CutCopyMode = False
    Selection.Copy
    ActiveSheet.Select
    ActiveSheet.Name = b
    Next
End Sub

Изображение файла Excel, в котором у меня есть имя

Измените имя вкладок с помощью списка и найдите функцию в VBA

И это второе изображение, в котором имя не находится в конкретной ячейке каждой вкладки.

Измените имя вкладок с помощью списка и найдите функцию в VBA

Таким образом, каждая вкладка в другой книге имеет одно имя из списка в столбце B листа (?) ThisWorkbook в нем, и когда вы найдете совпадение, вы хотите назвать лист после этого совпадения?

QHarr 02.05.2018 10:54

Чтение между строками (потому что я не понимаю, что именно вы просите), и если ваш вопрос заключается в том, что изложил @QHarr, кажется, простой цикл For Each с комбинацией .UsedRange должен решить проблему ... но позвольте посмотрите, каков ваш ответ на вопрос QHarr

Zac 02.05.2018 11:21

У вас есть переменная i, используемая как счетчик строк и счетчик листов одновременно - попробуйте использовать отдельные переменные для каждой - основной код правильный, но вы не найдете имя row1 на листе 1 для определенного!

jamheadart 02.05.2018 11:56

да, я хочу сделать то же самое, что сказал QHarr

Dipanshu 02.05.2018 12:21

Если каждая запись в столбце B находится на одном из листов, возможно, будет быстрее просмотреть листы и найти каждое значение в списке. Еще быстрее, если это единственная ячейка со значением на всем листе.

SJR 02.05.2018 12:26

никакие другие ячейки также не содержат каких-либо значений @SJR

Dipanshu 02.05.2018 12:29

Вы говорите, например, что В листе 2 есть ячейка, содержащая "арджун", а все остальные ячейки пусты?

SJR 02.05.2018 12:30

Я изменил переменную для счетчика строк, а также для счетчика столбцов, но все же получаю ошибку времени выполнения «91». Я получаю сообщение об ошибке при поиске части кода @jamheadart

Dipanshu 02.05.2018 12:31

другие ячейки не пустые @SJR

Dipanshu 02.05.2018 12:31
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
9
142
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете это попробовать? Вы получите сообщение об ошибке, если попытаетесь активировать несуществующий диапазон, поэтому вам нужно сначала проверить, найдено ли значение.

Sub change_Name_1()

Dim wb1 As Workbook, wb2 As Workbook, ws As Worksheet, r As Range, r1 As Range

Set wb1 = Workbooks("Book1") 'change names to suit
Set wb2 = Workbooks("Book2")

For Each r In wb2.Sheets(1).Range("B1", wb2.Sheets(1).Range("B" & Rows.Count).End(xlUp))
    For Each ws In wb1.Worksheets
        Set r1 = ws.UsedRange.Find(What:=r, LookIn:=xlValues, LookAt:=xlWhole, _
                                   MatchCase:=False, SearchFormat:=False)
        If Not r1 Is Nothing Then
            ws.Name = r
            Exit For
        End If
    Next ws
Next r

End Sub

не могли бы вы рассказать, что вы сделали здесь, в этой строке @SJR ==> For Each r In wb2.Sheets (1) .Range ("B1", wb2.Sheets (1) .Range ("B" & Rows.Count) ) .Конец (xlUp))

Dipanshu 02.05.2018 12:50

Да, он проходит через каждую ячейку в столбце B вашего второго файла. Бит End (xlup) находит последнюю использованную ячейку, работая снизу листа. Ясно?

SJR 02.05.2018 13:04

Другие вопросы по теме