Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("A2:A4"), Target) Is Nothing Then
For Each iCell In Target
Sheets(iCell.Row).Name = IIf(iCell <> "", iCell.Value, WorksheetFunction.Rept(" ", iCell.Row))
Next
End If
End Sub
Он рабочий но у меня задача чуть сложнее. Нужно чтобы имя листов бралось из ячеек
Например из листа 2 диапазон ячеек F10:O10 имя бы подставлялось в нужный лист F10 - лист 5 G10 - лист 6 H10 - лист 7 и так далее.....
Другими словами нужно чтобы имена нужных листов брались из горизонтального диапазона ячеек.
lil000 написал: брались из горизонтального диапазона ячеек.
И где в файле этот горизонтальный диапазон? Первоначальный макрос модуля листа, в котором при изменении в определенном диапазоне ячеек производятся некие действия. И тот-же вопрос - по какому принципу макрос должен забирать данные из этот "горизонтального диапазона"? Опрос ранее указанного диапазона на лсите с индесом 2? Изменяемые листы начиная с индекса 5 и далее?
lil000 написал: Другими словами нужно чтобы имена нужных листов брались из горизонтального диапазона ячеек
Так замените iCell.Row на iCell.Column. Нет? Иначе и будет всегда только один лист переименовываться, т.к. для диапазона F10:O10 iCell.Row всегда будет одинаковая.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("G9:V9"), Target) Is Nothing Then
For Each iCell In Range("G9:V9")
Sheets(iCell.Column).Name = IIf(iCell <> "", iCell.Value, WorksheetFunction.Rept(" ", iCell.Column))
Next
End If
End Sub
Остался маленький вопрос: Подскажите пожалуйста как поменять номер листа с которого начинается переименование.
Сейчас идет с 7 листа, то есть номер столбца и номер листа совпадает G=7. Если мне нужно чтобы имя листа стояло в G9 а переименовывался 3 лист. Что нужно для этого?