Как автоматически добавить рабочий лист из шаблона при заполнении ячейки на мастер-листе? - PullRequest
0 голосов
/ 02 июня 2019

У меня есть книга Excel с двумя листами "Мастер" и "Шаблон" Я хочу скопировать «шаблон», как только ячейка из диапазона A2:A20 заполнится на листе «Мастер» и назовите новый лист со значением A2:20. Я хотел бы скопировать значение из основного листа из двух ячеек во вновь созданный рабочий лист (из основных ячеек A2:B2 на новый лист (с именем A2) в ячейки D1:D2). Я хочу сделать это для каждой заполненной ячейки A2:A20, чтобы она не создавала новую рабочую таблицу для пустых ячеек A2:A20.

Так что, если бы я заполнил A2, A4 и A5, я бы получил 3 новых листа, например шаблон листа, с именами из A2, A4 и A5. В первом новом листе A2:B2 от мастера будет скопирован в D1:D2. Во втором новом листе A4:B4 будет скопирован в D1:D2, а на третьем новом листе A5:B5 будет скопирован в D1:D2

Я бы хотел, чтобы это было сделано, если Excel открыт, и если это будет сделано, не повторять это

это возможно?

очень ценю любую помощь

Sub CreateAndNameWorksheets()

    Dim c As Range

    Application.ScreenUpdating = False

    For Each c In Sheets("Master").Range("A2:A20")

        Sheets("Template").Copy After:=Sheets(Sheets.Count)

        With c

            ActiveSheet.Name = .Value

           .Parent.Hyperlinks.Add Anchor:=c, Address:="", SubAddress:= _
                "'" & .Text & "'!A1", TextToDisplay:=.Text

        End With

    Next c

    Application.ScreenUpdating = True


End Sub

1 Ответ

0 голосов
/ 02 июня 2019

Поместите этот код в модуль Workbook файла Excel.

Option Explicit

Private Sub Workbook_Open()

    With Worksheets("Master")

        'check if sheet creation process has happened already
        If .Cells(1, .Columns.Count).Value = "" Then

            Dim c As Range

            Application.ScreenUpdating = False

            For Each c In .Range("A2:A20")

                Worksheets("Template").Copy After:=Sheets(Sheets.Count)

                With c

                    ActiveSheet.Name = .Value

                    .Parent.Hyperlinks.Add Anchor:=c, Address:="", SubAddress:= _
                         "'" & .Text & "'!A1", TextToDisplay:=.Text

                End With

            Next c

            .Cells(1, .Columns.Count).Value = "created" 'mark cell as created so it skips next time and each time after

        End If

    End With

End Sub

Модуль класса ThisWorkbook:

enter image description here

...