Страница: 1 |
Страница: 1 |
Вопрос: Переименование листов в книге
Добавлено: 16.03.08 15:49
Автор вопроса: Marlen
Добрый день! Помогите решить проблему!
Имеется книга Excel с (скажем) 10 листами. Нужно в VBA переименовать листы по значению ячейки "A1" в каждом листе. Причем 5 листов имеют значение в ячейке ABC, остальные 5 DEF. Нужно чтобы первые первая группа листов имели имя типа ABC (1), ABC (2) ... ABC (5), а вторая группа DEF (1), DEF (2) ... DEF (5).
У меня получилось добавить порядковый номер листа, но нужна чтобы новая граппа имен начинала нумерацию с 1
For s = 1 To Worksheets.Count
Worksheets(s).Activate
On Error GoTo newname
ActiveSheet.Name = Range("A1")
newname:
ActiveSheet.Name = Range("A1") & s
Next s
End Sub
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #1
Добавлено: 16.03.08 16:35
Номер в группе определить отдельно от индекса листа. Определить текщее название группы (изначально — пробел). Сравнивать Range("A1".value с текщим именем группы и, если не совпадает, устанавливать номер в группе в единицу.
Не представляю, откуда это может взяться ошибка при инициации заведомо существующего листа?
Номер ответа: 2
Автор ответа:
Marlen
Вопросов: 3
Ответов: 6
Профиль | | #2
Добавлено: 16.03.08 16:56
Поставим вопрос по другому. Дело в том что имена листов могут быть абсолютно разными (не Лист 1 и т.д.) нужна процедура которая бы выполныла следующее:
1. Переименовать первый лист по значению в ячейке ("A1" = ABC) и добавить к нему номер 1. ABC (1)
2. Переименовать второй лист по занчению в ячейке ("A1" = ABC) и если имя совпадает с предыдущим листом то его имя должно быть ABC (2) и так по нарастающей.
3. Если следующий лист имеет значение ячейки ("A1" = DEF) то присвоить ему значение DEF (1), а дальше по тому же принцепу что предыдущие.
Номер ответа: 3
Автор ответа:
Marlen
Вопросов: 3
Ответов: 6
Профиль | | #3
Добавлено: 16.03.08 17:00
Если есть возможность то напишите работающий код. Так как я новичок в VBA.
Номер ответа: 4
Автор ответа:
Marlen
Вопросов: 3
Ответов: 6
Профиль | | #4
Добавлено: 16.03.08 17:53
Имеется книга Excel с N кол-вом листов. Нужно в VBA переименовать листы по значению ячейки "A1". Нужна процедура которая бы выполныла следующее:
1. Активировать первый лист
2. Переименовать лист по значению в ячейке ("A1" = ABC) в ABC. Если это первое имя листа то прибавить к нему 1. ABC (1)
3. Следующие листы с таким же значением ячейки должен иметь имя ABC (2), ABC (3) ... и т.д.
4. Если значение ячейки другое (новое) ("A1" =DEF ), тогда имя листа должно быть DEF (1), а следующие DEF (2), DEF (3)... и т.д.
Так как я новичок в VBA програмировании то прошу написать работающий код.
Вот что я смог написать, но к сожалении при новом значении ячейки порядковый номер продолжает увеличиваться ABC (1), ABC (2), ABC (3), DEF (4), DEF (5), DEF (6), GHI (7), GHI (, GHI (9).
А необходимо ABC (1), ABC (2), ABC (3), DEF (1), DEF (2), DEF (3), GHI (1), GHI (2), GHI (3).
For s = 1 To Worksheets.Count
Worksheets(s).Activate
On Error GoTo newname
ActiveSheet.Name = Range("A1"
newname:
ActiveSheet.Name = Range("A1" & s
Next s
End Sub
Номер ответа: 5
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #5
Добавлено: 16.03.08 18:26
Так и писал выше, что номер нужно держать отдельно от индекса листа. Да я бы и с индексом не связывался.
Dim s As Worksheet, n As Long, name As String
name = ""
n = 1
For Each s In Worksheets
s.Activate
If Cells(1, 1).Value <> name Then
n = 1: name = Cells(1, 1).Value
End If
s.name = Cells(1, 1).Value & "" & n & ""
n = n + 1
Next
End Sub
Только вот не знаю, будет работать или нет.
Номер ответа: 6
Автор ответа:
Marlen
Вопросов: 3
Ответов: 6
Профиль | | #6
Добавлено: 17.03.08 13:54
Огромное спасибо! Все работает так как и требовалось.