Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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
 
Sub MasterCopies()
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-сайт: www.adsemenov.ru
 Профиль | | #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).
Sub SheetRename()
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-сайт: www.adsemenov.ru
 Профиль | | #5
Добавлено: 16.03.08 18:26
    Так и писал выше, что номер нужно держать отдельно от индекса листа. Да я бы и с индексом не связывался. :)
Sub SheetRename()
  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
Огромное спасибо! Все работает так как и требовалось.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам