У меня есть список имен в одной книге в столбце 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, в котором у меня есть имя
И это второе изображение, в котором имя не находится в конкретной ячейке каждой вкладки.
Чтение между строками (потому что я не понимаю, что именно вы просите), и если ваш вопрос заключается в том, что изложил @QHarr, кажется, простой цикл For Each
с комбинацией .UsedRange
должен решить проблему ... но позвольте посмотрите, каков ваш ответ на вопрос QHarr
У вас есть переменная i
, используемая как счетчик строк и счетчик листов одновременно - попробуйте использовать отдельные переменные для каждой - основной код правильный, но вы не найдете имя row1 на листе 1 для определенного!
да, я хочу сделать то же самое, что сказал QHarr
Если каждая запись в столбце B находится на одном из листов, возможно, будет быстрее просмотреть листы и найти каждое значение в списке. Еще быстрее, если это единственная ячейка со значением на всем листе.
никакие другие ячейки также не содержат каких-либо значений @SJR
Вы говорите, например, что В листе 2 есть ячейка, содержащая "арджун", а все остальные ячейки пусты?
Я изменил переменную для счетчика строк, а также для счетчика столбцов, но все же получаю ошибку времени выполнения «91». Я получаю сообщение об ошибке при поиске части кода @jamheadart
другие ячейки не пустые @SJR
Вы можете это попробовать? Вы получите сообщение об ошибке, если попытаетесь активировать несуществующий диапазон, поэтому вам нужно сначала проверить, найдено ли значение.
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))
Да, он проходит через каждую ячейку в столбце B вашего второго файла. Бит End (xlup) находит последнюю использованную ячейку, работая снизу листа. Ясно?
Таким образом, каждая вкладка в другой книге имеет одно имя из списка в столбце B листа (?) ThisWorkbook в нем, и когда вы найдете совпадение, вы хотите назвать лист после этого совпадения?