Страницы: 1
RSS
Автоматическое добавление листов в книгу и присвоение им имени по списку.
 
Всем, добрый день.
Вот нашел такой макрос в сети. Не знаю кто автор. Суть заключается в присвоении имен листам книги по списку, сформированному на листе «ИмяЛистов».
Недостатки: присваивает имена листам не далее десятой строки листа «ИмяЛистов», при несоответствии количеству позиции в списке количеству листов в книге  выдает ошибку.
Может быть у кого- то есть  более гибкий вариант макроса который: автоматически создает количество листов по количеству позиций в выбранном диапазоне плюс соответственно именует эти листы.
 
В любом случае количество листов должно соответствовать количеству строк. Или перебирать только до ячейки, которая соответствует номеру последнего листа.
 
Здравствуйте. Может это подойдет.

Цитата
автоматически создает количество листов
 
Тему создавать не стал, поскольку задача в чем-то похожа. Более того, было несколько тем похожих на эту. Поскольку в написании макросов я полный ноль, выкладывать те недоразумения, что у меня получались при попытках как-то изменить под себя код из примеров с форума, не вижу смысла (стыдно) :oops:
Моя задача такая.
Формируется книга из набора листов, один два листа могут иметь текстовое наименование, все остальные номерованные - 1, 2, 3 и т.д.  Затем, некоторые из номерованных листов могут быть удалены ( в произвольном порядке, в разнобой, как угодно, просто за ненадобностью). А теперь надо заново перенумеровать акты по порядку. Т.е. задача состоит в том чтобы перенумеровать оставшиеся листы, и если их несколько, то сделать это вручную не сложно, но их может быть десяток, и не один. Помогите пожалуйста с написанием кода. Если это поможет в решении, то на одном из листом с текстовым именем есть перечисление номеров листов.
 
Задача не совсем ясна. Нужно по имеющемуся списку по порядку переназвать листы? А если их меньше или больше, чем в списке?
 
А попробуйте это
Код
Sub ImyaLista() 
    For i = 2 To Sheets.Count
      ThisWorkbook.Sheets(i).Name = i - 1
    Next
End Sub
 
gling, Да Ваш код работает, спасибо, возможно он примитивен, но я и этого не смог сделать, спасибо Вам. В связи с тем, что номера существующих листов могут совпадать с номерами генерируемыми кодом высвечивается ошибка о том что лист с таким именем существует. Может есть смысл прогнать 2 цикла? В первом будут присваиваться номера заведомо превышающие существующие, а во втором уже по Вашему примеру, такое возможно?
Очень важно чтобы нумерация шла по порядку начиная с 1, т.к. номера листов используются в самом листе для присваивания номера документа.

Влад, Обычно я список формирую после того как будут удалены ненужные листы. Но конечно человеческий фактор возможен. Наверное на список не очень стоит в таком случае полагаться. Как я понимаю, если листов будет меньше чем в списке, то просто остановиться выполнение кода. Или я ошибаюсь? В коде gling, список не нужен.

Загрузил файл образец, если это чем-то поможет.  
 
Ну да можно два цикла
Код
Sub ImyaLista()
    For i = 2 To Sheets.Count
      ThisWorkbook.Sheets(i).Name = "ЫЫЫ" & i - 1
    Next
    For i = 2 To Sheets.Count
      ThisWorkbook.Sheets(i).Name = i - 1
    Next
End Sub
Изменено: gling - 18.03.2015 21:49:15
 
О, а такой вариант мне в голову не пришел, я подумал о чем-то таком, для первого цикла:
Код
Sub ImyaLista()
    For i = Sheets.Count + 1 To Sheets.Count + ` количество листов
      ThisWorkbook.Sheets(i).Name = i - 1
    Next
End Sub
но как водится, у меня не заработало, как определить число листов я не знаю, и поэтому количество листов задал числом 10, и высветилась ошибка в строке №3.
Изменено: cuprum - 18.03.2015 22:02:16
 
gling, Ваш код из двух циклов замечательно справился, большое спасибо.
 
Ваш вариант должен выглядеть возможно так. Я тоже не очень в макросах, но он работает.
Код
Sub ImyaLista1()
    Dim a&
    a = Sheets.Count
    For i = 2 To a
      ThisWorkbook.Sheets(i).Name = a & i - 1
    Next
    For i = 2 To Sheets.Count
      ThisWorkbook.Sheets(i).Name = i - 1
    Next
End Sub
Намудрил с переменной можно и без неё
Код
Sub ImyaLista1()
    For i = 2 To Sheets.Count
      ThisWorkbook.Sheets(i).Name = Sheets.Count & i - 1
    Next
    For i = 2 To Sheets.Count
      ThisWorkbook.Sheets(i).Name = i - 1
    Next
End Sub
Изменено: gling - 18.03.2015 22:07:27
 
Я теперь в растерянности, не знаю какой из кодов использовать, ведь все выполняют свою задачу :D
 
Не важно какой, просто смотрите разницу и отметьте для себя, в дальнейшем пригодится.
 
Цитата
cuprum написал:
не знаю какой из кодов использовать, ведь все выполняют свою задачу
Выполняйте два последовательно )
 
Юрий М не правда Ваша,  цитата в #14  не моя.
 
Движок барахлит )) Исправил.
 
cuprum,
вот так влезут некоторые "с ногами" в тему и все, теряется суть первоначального вопроса. Создавайте свою тему пожалуйста.
gling,
посмотрите в начале темы, я именно этот файл и прикреплял как пример и описывал его недостатки..
Страницы: 1
Наверх