Создаю однотипные листы по шаблону. Задача состоит в том, чтобы создавались не все записи из реестра, а только выделенные в реестре или отфильтрованные. Подскажите как это осуществить?
Создаю однотипные листы по шаблону. Задача состоит в том, чтобы создавались не все записи из реестра, а только выделенные в реестре или отфильтрованные. Подскажите как это осуществить?
labm-12, Здравствуйте. Дважды кликаете по любой строке в столбце T этого Листа import появляется Отметка (a) в данной строке это значит что вы выбрали данную строку для создания шаблона. Смотрим файл, там вы всё поймёте. Удачи.
labm-12, Здравствуйте. Дважды кликаете по любой строке в столбце T этого Листа import появляется Отметка (a) в данной строке это значит что вы выбрали данную строку для создания шаблона. Смотрим файл, там вы всё поймёте. Удачи.MikeVol
MikeVol, все работает только в первых трех строках реестра, при добавлении новых строк в реестр(import) выдает ошибку Run-time error 9: subscript out of range. Куда копать?
MikeVol, все работает только в первых трех строках реестра, при добавлении новых строк в реестр(import) выдает ошибку Run-time error 9: subscript out of range. Куда копать?labm-12
labm-12, Ошибка возникает потому, что индекс i в вашем цикле начинается с 1, но при достижении 4, он пытается обратиться к листу с индексом 4, который не существует. Вот новый код который скопирует лист "template" в конец книги, переименует его и заполнит данными.
[vba]
Код
Option Explicit
Sub start_v2() Dim i As Long Dim importSheet As Worksheet: Set importSheet = ThisWorkbook.Worksheets("import") Dim lastSheet As Worksheet: Set lastSheet = ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
With importSheet Dim size As Long: size = WorksheetFunction.CountA(.Range("A2:A500")) Dim tmpName() As Variant: tmpName = .Range("A2:A" & size + 1).Value Dim base() As Variant: base = .Range("A2:S" & size + 1).Value End With
For i = 1 To size
If importSheet.Cells(i + 1, 20).Value = "a" Then ' Предполагая, что Отметки находятся в столбце T (столбец 20) ThisWorkbook.Worksheets("template").Copy After:=lastSheet Dim newSheet As Worksheet: Set newSheet = ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) newSheet.Name = "п." & tmpName(i, 1)
With ThisWorkbook.Worksheets(i) ' тот же код что и в прошлом коде тут впишите сами ' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' End With
Set lastSheet = newSheet End If
Next i
End Sub
[/vba]
labm-12, Ошибка возникает потому, что индекс i в вашем цикле начинается с 1, но при достижении 4, он пытается обратиться к листу с индексом 4, который не существует. Вот новый код который скопирует лист "template" в конец книги, переименует его и заполнит данными.
[vba]
Код
Option Explicit
Sub start_v2() Dim i As Long Dim importSheet As Worksheet: Set importSheet = ThisWorkbook.Worksheets("import") Dim lastSheet As Worksheet: Set lastSheet = ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
With importSheet Dim size As Long: size = WorksheetFunction.CountA(.Range("A2:A500")) Dim tmpName() As Variant: tmpName = .Range("A2:A" & size + 1).Value Dim base() As Variant: base = .Range("A2:S" & size + 1).Value End With
For i = 1 To size
If importSheet.Cells(i + 1, 20).Value = "a" Then ' Предполагая, что Отметки находятся в столбце T (столбец 20) ThisWorkbook.Worksheets("template").Copy After:=lastSheet Dim newSheet As Worksheet: Set newSheet = ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) newSheet.Name = "п." & tmpName(i, 1)
With ThisWorkbook.Worksheets(i) ' тот же код что и в прошлом коде тут впишите сами ' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' End With