#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