Скопируйте шаблон на новый лист с именем из ячейки

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

Я хочу, чтобы эти новые листы были копией еще одного листа.

Итак, на листе «распоряжение» я пишу имена в диапазоне «a2:a2000». Например. 233.

233 становится новым листом, который является копией листа «шаблон».

У меня нет опыта работы с VBA, поэтому код я финансирую онлайн и модифицирую.

Я пытался изменить Worksheet.add на Worksheet(template).copy

Но это, кажется, не помогает.

Sub CreateSheets()
    Dim StartSheet As Worksheet
    Set StartSheet = ActiveSheet
    Dim rng As Range
    Dim cell As Range
    On Error GoTo Errorhandling
    
    If MsgBox("Opret ark baseret på løbenumre?", vbYesNo + vbQuestion) = vbNo Then
    Exit Sub
    End If
    
    Set rng = Range("A2:a2000")
    For Each cell In rng
        If cell <> "" Then
            Worksheets.Add(After:=Worksheets("disposition")).Name = cell
            Sheets("Template").Copy Worksheets(cell).Range("A1")
        End If
    Next cell
    
    Errorhandling:
    StartSheet.Activate
End Sub
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо того, чтобы добавлять новый рабочий лист, просто скопируйте его напрямую с помощью метода Worksheet.Copy:

If cell <> "" Then
    Worksheets("Template").Copy After:=Worksheets("disposition") 'adds a copy of the template sheet after disposition
    Worksheets(Worksheets("disposition").Index + 1).Name = cell.value 'renames the new added template copy (which is +1 after disposition sheet)
End If

Спасибо большое, работает почти идеально! Но если я сначала создам два новых листа, а позже обнаружу, что мне нужен дополнительный, и поэтому добавлю имя xtra в индекс и снова запущу vba, он назовет новый лист xtra «template 2». Это можно как-то исправить?

Michelle Hansen 13.01.2021 15:40

Чтобы показать код: Sub CreateSheets() Dim StartSheet As Worksheet Set StartSheet = ActiveSheet Dim rng As Range Dim cell As Range On Error GoTo Errorhandling If MsgBox("Opret ark baseret på løbenumre?", vbYesNo + vbQuestion) = vbNo Then Exit Sub End If Set rng = Range("A2:a2000") For Each cell In rng If cell <> "" Then Worksheets("Template").Copy After:=Worksheets("disposition") Worksheets(Worksheets("disposition").Index + 1).Name = cell End If Next cell Errorhandling: StartSheet.Activate End Sub

Michelle Hansen 13.01.2021 15:44

Другие вопросы по теме