Страницы: 1
RSS
Можно ли автоматически создать в книге листы
 

Здравствуйте.

Есть книга, в которой есть общий список (в нем много фамилий) - лист 1, и лист 2, который создается под конкретное лицо. Можно ли автоматически добавить в книгу столько листов, сколько указано в первом списке (со ссылкой на фио).

Изменено: Sanja - 04.08.2026 03:13:48
 
Здравствуйте. Да можно. Ниже код макроса по созданию листов по списку (ключевой момент названия для списка листов начинаются с A2 и ниже, если у Вас другой диапазон, просто немного меняем код макроса). Не совсем понял про вторую часть "и в этом листе в графе с фио тоже автоматически указывать ФИО" - можете пояснить?
Код
Sub Create_sheets()
        
' Объявляем переменные
    Dim collection As New collection
    Dim ws As Worksheet
    Dim new_ws As Worksheet
    Dim last_row As Long
    Dim i As Long
    Dim cell As Range
    Dim Sheet_exists As Boolean
    
' Отключаем лишнее
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    
' Задаём ссылку на 1ый лист
    Set ws = ActiveWorkbook.Sheets(1)
    
' Определяем последнюю заполненную ячейку
    last_row = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
' Проходимся по каждой ячейке 1го листа с A2 вниз и добавляем в коллекцию
    For Each cell In ws.Range("A2:A" & last_row)
        
        collection.Add (cell)
        
    Next cell
    

' Создаём новый лист по названию элемента в коллекции (если такого листа ещё нет)
    For i = 1 To collection.Count
        
        Sheet_exists = False
        
        ' Проверяем существует ли лист с таким названием
        For Each ws In ActiveWorkbook.Worksheets
            
            If ws.Name = collection.Item(i) Then
                
                Sheet_exists = True
                
                Exit For
                
            End If
            
        Next ws
        
        ' Если лист не существует, то создаём его
            
            If Not Sheet_exists Then
                
                On Error Resume Next ' На случай если имя листа некорректное
        
        Set new_ws = ActiveWorkbook.Sheets.Add(After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count))
        new_ws.Name = collection.Item(i)
                
                On Error GoTo 0
                
            End If
            
    Next i
    
    
' Очищаем коллекцию
    Set collection = Nothing
    
' Переходим на 1ый лист
    ActiveWorkbook.Sheets(1).Activate
    
' Включаем то, что ранее отключали
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
        
End Sub
 
Цитата
Анна Х написал:
много фамилий
- только не забывайте что имена листов должны быть уникальны, и не длиннее 30-ти кажется символов, так что только фамилия думаю не пойдёт если их много, да даже и одна фамилия может превысить лимит. А полное ФИО точно часто превысит.
Так что добавить листы можно пока память не закончится, только как в них потом разбираться?
Может менять подход? Вот зачем нужны эти листы?
 
Спасибо. Для меня макросы - темный лес. Я могу макрос сделать по минимуму (когда сама записываю действия). Эти же коды для меня - сложно.

Поняла. Спасибо. Придется копировать.

Спасибо.
 
Цитата
написал:
Может менять подход? Вот зачем нужны эти листы?
А как? Мне нужно создать по каждой фио документ (там много всякой информации (она берется из сводной "головной" таблицы)). По формулам все придумала (ставлю ФИО, все остальное получаю автоматически). Только теперь хотелось бы облегчить работу себе: не каждого человека копировать, а автоматизировать как-то - типа взять из этого же "головного" списка фио и чтоб документ как бы "появился сам". Ну, понимаю, что бредовая идея наверно. Только макросы.
Но с макросами я не дружу - только минимум.  
 
Анна Х, для чего "создать документ"?
Если для печати - можно создавать документ по запросу на одном и том же листе, и печатать. И так в цикле на каждую персону печатаете этот один Лист2.
Если нужно выслать например на почту - создавайте файл, тогда и по имени меньше ограничений (но они тоже есть в общем случае), да и можно вообще всем одно имя ставить и высылать, как часто делают.
 
Цитата
Анна Х написал:
По формулам все придумала (ставлю ФИО, все остальное получаю автоматически).
- может этого и достаточно - меняете ФИО выбирая из выпадающего списка, и печатаете.
Можно эту операцию доверить макросу - в цикле будет менять и печатать, или может лист в файл сохранить, или в добавленный лист, но тут тогда имена давать числами, а как затем разбираться где кто?...
 
Цитата
написал:
Но с макросами я не дружу

Попробуйте вариант Слияние Word и Excel.  
 
Цитата
Анна Х написал: там много всякой информации
Приложите файл-пример в реальной структуре(!). Реальные данные можно заменить абстрактными.
Заполнение бланков данными из таблицы
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Читают тему
Наверх