Нужна помощь в добавлении цикла для подсчета всех скрытых листов или листов, начинающихся с «S.»

#excel #vba #list #loops #count

#excel #vba #Список #циклы #подсчет

Вопрос:

Я хочу удалить список здесь, заменив его какой-либо функцией автоматического подсчета, которая подсчитывает либо количество скрытых листов в книге, либо подсчитывает все листы с именем «S.» (даст тот же результат, что и проще)

Цель состоит в том, чтобы автоматизировать функцию, чтобы «22» не использовалось, поскольку в некоторых книгах меньше листов

Я попробовал несколько функций, но пока не могу интегрировать счетчик во вторую часть кода (для ii = 1-22)

 Dim list(22) As Variant> 
list(1) = "S.xxx "
list(2) = "S.xx "
etc 


Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim Filename As String 
Dim GetFile As Variant 


Workbooks.Open GetFile(i)
With ActiveWorkbook
For ii = 1 To 22
Set ws1 = Sheets.(list(ii))
Set ws2 = ThisWorkbook.Sheets(list(ii))
ws1.Cells.Copy ws2.Cells 

Next ii
End with

ActiveWorkbook.Close
  

Комментарии:

1. что такое GetFile(i) ?

2. открывается новый файл — код пытается импортировать данные из шаблонов и поместить их в соответствующие шаблоны в master

Ответ №1:

вы можете использовать For Each ... Next цикл для проверки первого символа названия текущего листа:

 Dim ws As Worksheet
Dim GetFile As Variant

' some code to define GetFile...

With Workbooks.Open(GetFile(i)) ' open and reference wanted file
    For Each ws In .Worksheets ' loop through referenced workbook worksheets
        If UCase(Left(ws.name, 1) = "S") Then ' if current worksheet name begins with "S"
            ThisWorkbook.Worksheets(ws.name).UsedRange.Clear ' clear "target" worksheet (i.e. worksheet in ThisWorkbook with the same name) used range
            ws.UsedRange.Copy ThisWorkbook.Worksheets(ws.name).Range("A1") ' copy current worksheet used range to "target" worksheet
        End If
    Next
    .Close
End With