1

Тема: VBA: Переименование листа в новой книге

Коллеги, добрый день!

Суть вопроса:

1. Есть книга Excel.
2. Формирую отчет:
      - Создаю новую книгу с одним рабочим листом;
      - Загружаю в нее шаблон отчета (состоит из 5 листов);
      - Сохраняю новую книгу;
3. Из старой книги выбираю и копирую данные в новую (имя листа в старой книге соответствует имени листа с шаблоном отчета в новой);
4. Удаляю лист, созданный при создании новой книги, в названии которого есть "Лист");
5. Сохраняю новую книгу.

Пока все работает, но...

Пришлось реализовать возможность переименования рабочих листов в старой книге (при загрузке книги названия листов сравниваются со списком имен и, при необходимости, переименовываются). Список имен хранится на отдельном листе загружаемой книги и при открытии файла обновляется из файла настроек (что-то, тип .ini файла).

Возникла необходимость сравнить названия листов в новой книге со значением из списка имен и, в случае несовпадения, переименовать.

Вот тут и возникла проблема: Как обратиться к листу в новой книге по CodeName (которое я знаю), чтоб узнать его Name, сравнить его со значением из конкретной ячейки в старой книги и, при необходимости, переименовать?


Windows(newbook).Activate
            If Лист2.Name <> Workbooks(oldbook).Sheets("Настройки").Range("J2").Value Then
                Лист2.Name = Workbooks(oldbook).Sheets("Настройки").Range("J2").Value
            End If

Что не так? Почему, несмотря на то, что новая книга активна, мне выдает Name Лист2 старой книги?

2

Re: VBA: Переименование листа в новой книге

Что-то у меня входит в привычку самостоятельно решать возникшие проблемы.

Опять снимаю вопрос, т.к. нашел решение. Возможно, не совсем впрямую и слишком мудрено, но нужный результат получил.

Всем кто читал, спасибо, что хотя бы заинтересовались.

3

Re: VBA: Переименование листа в новой книге

vinkonik пишет:

Что-то у меня входит в привычку самостоятельно решать возникшие проблемы.

Ну это так-то нормально

vinkonik пишет:

нужный результат получил.

Опубликуете?

Щт Уккщк Куыгьу Туче
’ҐЄгй п Є®¤®ў п бва Ёж : 1251

4 (изменено: vinkonik, 2014-05-12 12:07:25)

Re: VBA: Переименование листа в новой книге

Запросто.
Небольшое предварительное пояснение.

При загрузке исходной книги на основании файла настроек создается список Имен рабочих листов и сохраняется на листе "Настройки". Рабочие листы исходной книги, так же проверяются на соответствие имен созданному списку и, если нужно, переименовываются.

В шаблоне отчета нужным листам присвоены CodeName, которые никогда не изменяются
Установлено жесткое соответствие CodeName строке списка с именами рабочих листов в исходной книге на листе "Настройки".

(Выкладываю только кусок кода в котором реализуется ответ на мой же вопрос (естественно, что и до него и после еще много чего делается...)


Workbooks.Add (xlWBATWorksheet)                         ' Создание новой книги с одним рабочим листом
        ' Загрузка шаблона отчета в созданный файл
Sheets.Add Type:=Old_Path & "\Шаблоны\Шаблон Выгрузка из Воронки.xltx", After:=Sheets(1)
        ' Сохранение созданного файла в папке выбранной ранее
ActiveWorkbook.SaveAs Filename:=fileSaveName, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        ' Определение имени созданной книги для дальнейшей работы с ней
newbook = Workbooks.Application.ActiveWorkbook.Name
        ' Проверка имен листов в созданной книге и, при необходимости, переименование
For i = 1 To Sheets.Count                          ' Цикл по всем листам новой книге
      Select Case Worksheets(i).CodeName
      Case "Форма_1"                                ' CodeName листа с Name "Регионы"
            If Worksheets(i).Name <> Workbooks(oldbook).Sheets("Настройки").Range("J2").Value Then
                  Worksheets(i).Name = Workbooks(oldbook).Sheets("Настройки").Range("J2").Value
            End If
      Case "Форма_2"                                ' CodeName листа с Name "Госсектор"
             If Worksheets(i).Name <> Workbooks(oldbook).Sheets("Настройки").Range("J3").Value Then
                   Worksheets(i).Name = Workbooks(oldbook).Sheets("Настройки").Range("J3").Value
             End If
      Case "Форма_3"                                ' CodeName листа с Name "Финансовый сектор"
              If Worksheets(i).Name <> Workbooks(oldbook).Sheets("Настройки").Range("J4").Value Then
                    Worksheets(i).Name = Workbooks(oldbook).Sheets("Настройки").Range("J4").Value
              End If
      End Select
Next i

Вот, как то так.
Отвечу на вопросы. Прислушаюсь к советам....

5

Re: VBA: Переименование листа в новой книге

vinkonik, оформите код правильно.