Макрос для вставки листа - Советы по Excel

Содержание

"Застрял в Нью-Джерси" задал вопрос на этой неделе:

Я создаю книгу Excel, содержащую диаграммы показателей продаж. Первый рабочий лист Excel соответствует первой территории продаж в компании (например, FL01). Имя вкладки рабочего листа (как и ячейка A1) - это номер территории продаж FL01. Данные, управляющие диаграммами, находятся справа (за пределами заданного мной диапазона печати) и заполняются из другой книги Excel с помощью функции ВПР с номером территории продаж FL01 в ячейке A1 в качестве ключа поиска. Мне нужно добавить в книгу 76 идентичных листов (по одному для каждой территории продаж), чтобы имя вкладки каждого листа и ячейка A1 равнялись последовательным номерам территорий продаж (например, FL01, FL02, LK01, LK02). Как мне это сделать в автоматический способ?

Это легко сделать с помощью макроса VBA, но позвольте мне рассказать о том, как сделать это вручную. Если у вас есть лист, настроенный с форматированием и диапазонами печати, вы можете легко продублировать лист, щелкнув правой кнопкой мыши вкладку для этого листа. Во всплывающем меню выберите «Переместить» или «Копировать». В диалоговом окне «Перемещение или копирование» выберите «(переместить в конец)» и установите флажок «Создать копию», затем нажмите «ОК». Копия вашего листа с форматированием будет добавлена ​​в вашу книгу как новый лист. (Чтобы ускорить этот процесс, удерживайте клавишу Ctrl при перетаскивании вкладки рабочего листа вправо.) Обычно вы хотите переименовать лист. Щелкните новую вкладку правой кнопкой мыши, выберите переименовать и введите значащее имя.

Чтобы макрос Excel работал, ему нужен список территорий. Прежде чем писать макрос, вставьте в эту книгу новый лист с именем Data. В ячейке A1 введите вторую территорию продаж (в вашем примере - FL02). Продолжайте вводить все территории продаж в столбце A. Не оставляйте пустых строк.

Вставьте новый макрос и скопируйте этот код:

Public Sub CopyIt() Sheets("Data").Select ' Determine how many territories are on Data sheet FinalRow = Range("A65000").End(xlUp).Row ' Loop through each territory on the data sheet For x = 1 To FinalRow LastSheet = Sheets.Count Sheets("Data").Select ThisTerr = Range("A" & x).Value ' Make a copy of Fl01 and move to end Sheets("FL01").Copy After:=Sheets(LastSheet) ' rename the sheet and set A1 = to the territory name Sheets(LastSheet + 1).Name = ThisTerr Sheets(ThisTerr).Select Range("A1").Value = ThisTerr Next x End Sub

Макрос использует команду Sheets (). Copy, которая выполняет то же действие, что и нажатие кнопки «Переместить» или «Копировать» вручную. Перед тем, как делать каждую копию, я узнаю количество листов с помощью свойства Sheets.Count. Я знаю, что если есть 56 листов, и я вставляю новый лист, он будет обозначен как Листы (57). Я считаю, что несколько непредсказуемо угадать, как Excel назовет новый лист, поэтому я использую числовые индексы для идентификации листа. Как только я переименую новый лист в «Sheets (LastSheet + 1) .Name = ThisTerr», я могу вернуться к своему предпочтительному методу обращения к листу, используя его имя.

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

Интересные статьи...