Это быстрое и грязное решение , но все равно будет работать.
Начните с объявления листов, которые должны быть зациклены в Array()
, называемом specificWorksheets
.Если их действительно 200, то лучше создать какой-то цикл или прочитать их из таблиц настроек.В любом случае, это рабочая часть:
Sub TestMe()
Dim specificWorksheets As Variant
specificWorksheets = Array("payroll (3)", "payroll (1)", "payroll (2)")
Dim wks As Worksheet
For Each wks In ThisWorkbook.Worksheets
If valueInArray(wks.Name, specificWorksheets) Then
wks.Activate
'Do your stuff, writing before...
End If
Next
End Sub
Public Function valueInArray(myValue As Variant, myArray As Variant) As Boolean
Dim cnt As Long
For cnt = LBound(myArray) To UBound(myArray)
If LCase(CStr(myValue)) = LCase(CStr(myArray(cnt))) Then
valueInArray = True
Exit Function
End If
Next cnt
End Function
На месте комментария 'Do your stuff
скопируйте и вставьте свой код.
Почему это Быстро и грязно ?Главным образом из-за использования Activate
и, следовательно, со ссылкой на активный лист.Как только вы поймете, как работает цикл for-each, лучше прочитать это - Как избежать использования Select в Excel VBA - и переписать ваш код.Существует причина, по которой это вторая по популярности тема в [vba] в StackOverflow.