Здравствуйте! Подскажите, пожалуйста, макрос для такой задачи: Нужна кнопка на листе1, по щелчку на которой переименовывались бы все листы книги, имя листа выбиралось бы исходя из значений в ячейке J7 каждого листа. Например, на листе2 в ячейке J7 стоит "2", значит, имя этого листа становится "2", а на листе3 в ячейке J7 стоит "3", значит имя этого листа становится "3"... Очень надеюсь на помощь знатоков. P.S. В принципе, можно и на событие изменения листа1 повесить... Если можно, помогите с обоими вариантами...
Sub Переименовать_листы()
Dim i As Long
Application.ScreenUpdating = False
For i = 2 To Worksheets.Count
Worksheets(i).Name = Worksheets(i).Range("J7").Value
Next
Application.ScreenUpdating = True
MsgBox "Готово!", vbInformation
End Sub
flashertheone написал: Еще бы на событие изменения ячеек A6-F500 в листе1
В модуль листа1:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("A6:F500")) Is Nothing Then
Call Переименовать_листы
End If
End Sub
Цитата
flashertheone написал: а там уж буду выбирать, какой макрос больше подойдет
Добавил запуск макроса по событию. Сделал так, что макрос будет запускаться, если на листе 1 изменение произойдет в одной ячейке, а не в нескольких сразу.
flashertheone написал: Еще бы на событие изменения ячеек A6-F500 в листе1 повесить
Странная хотелка: контролируем большой диапазон - при изменении значенния в любой из этих ячеек будут вновь и вновь переименовываться листы, хотя значения в ячейках J7 на них, не меняется. В чём смысл многократно переписывать имена листов, если менять их не требуется?
Юрий М, а как можно оптимизировать? Дело в том, что большой диапазон значений будет копироваться на лист1, как раз в А6-F500 (возможно, не всегда будет задействован полный диапазон, а допустим A6:F100). Этот диапазон чисел раскидывается по остальным листам определенными порциями в определенные таблицы. Остальные листы - сплошные формулы, там вручную ничего меняться не будет. Единственный момент - ячейки J7 на остальных листах изменяют свои значения, согласно формуле, в зависимости от величины скопированного диапазона чисел на лист1. И уже макрос переименовывает листы так, как задала формула в ячейке J7 каждого листа. В принципе, многократно этот диапазон A6-F500 меняться не будет - ctrl+c, ctrl+v и забыл, грубо говоря. Но Вы правы, при каждом изменении этого диапазона, будут переименовываться все существующие листы... Не знаю уж, понятно ли объяснил, попробую попроще... Копируем числа с 1 до 50 на лист1 в контролируемый диапазон. В таблицу на листе2 с помощью ИНДЕКС+ПОИСКПОЗ возвратились значения с 1 по 10, на лист3 - с 11 по 20, на лист4 - с 21 по 30 и т.д. Имена листов должны соответствовать указанному в каждой таблице диапазону, то есть, лист1 переименовывается у нас в 1-10, лист 2 - в 11-20, лист3 - в 21-30 и т.д. Эти имена возвращает формула в ячейке j7 на каждом из листов + она не дает одинаковые названия листам, которые остались без изменений (иначе были бы все остальные листы с именем "0-0", а excel бы этого не простил =) ). В оригинале слегка посложнее все, но суть описал))
Была мысль использовать событие в модуле книги Workbook_SheetChange, но выясняется, что значение в ячейках j7 меняется формулой ( Тогда уж лучше по необходимости кнопкой ) Впрочем, Вам там на месте виднее :-)
а у меня такая проблема,в одной книге имеется столько листов сколько дней в месяце,я хочу чтобы листы переименовывались в даты месяца и желательно на ярлычках листа выходные дни заливались красным цветом желательно.И так с каждым месяцем,я пишу график работ ежедневно,а вручную переименовывать занимает много времени.Помогите пожалуйста кто может.Спасибо за ранее