Очень новый для VBA, объединяющий мой код из предыдущих листов, созданных другими, и того, что я нашел в Интернете, работая в основном в обратном направлении.
У меня есть главная рабочая книга, которую я пытаюсь создать. Начинается с двух листов. Первый (Start) будет содержать некоторые макросы, влияющие на все новые рабочие листы, второй (Template) - это шаблон для генерации оставшихся рабочих листов. На старте - набор из двух диапазонов (различного, но одинакового размера), один из которых используется для создания новых рабочих листов из шаблона; оба, чтобы записать себя в определенную ячейку на каждом из новых листов.
Пока мне удалось:
- Запишите подпрограмму, которая генерирует новые листы из шаблона, и запишите из диапазона 1 в начале в ячейку «C6» на каждом из новых листов. Значение «C6» в шаблоне (1) равно ячейке 1 диапазона 1 при запуске, значение «C6» в шаблоне (2) равно ячейке 2 диапазона 1 при запуске и т. Д., И так далее.
- Записать подпрограмму, чтобы пройтись по всем новым рабочим листам шаблона и записать значение из диапазона 2 в начале в ячейку "E6" на всех рабочих листах шаблона.
- Написать подпрограмму для переименования вновь созданных рабочих таблиц из значений в диапазоне 1 при запуске.
С чем я борюсь, так это как получить подпроцессор, который проходит по всем листам, только цикл по листам с именем «Шаблон (1)» к «Шаблону (X)» и записать значение из ячейки 1 Диапазон от 2 до шаблона (1), ячейка 2 от диапазона 2 до шаблона (2) и т. Д. И т. Д.
Я нашел код в SO, предназначенный для циклического прохождения всех листов, кроме одного, основанного на имени листа, он не хочет работать для этой цели. Кроме того, я получаю одно и то же значение на каждой из новых рабочих таблиц вместо значения диапазона 2, которое соответствует его аналогу диапазона 1.
Dim ThisWorkbook As Workbook
Dim recap As Worksheet 'sheet codename for Template
Dim start As Worksheet 'sheet codename for Start
Dim CCell As Range, CSI As Range 'Range 2 is CSI
Set CSI = Sheets("START AND FINISH HERE").Range("CSI")
Set CSI = Range(CSI, CSI.End(xlDown))
For Each CCell In CSI
If CCell <> "" Then
Set recap = Nothing
On Error Resume Next
Set recap = start(CCell.Value)
On Error GoTo 0
If recap Is Nothing Then
Range("E6").Value = CCell.Value
Else
End If
Else
End If
Next CCell