2015-11-15 2 views
1

Я новичок на сайте и новичок в кодировании vba и очень новых для циклов, в настоящее время я пытаюсь обобщить данные в книге, которая имеет всего 25 листов, и эти листы не фиксированы основанные на проблемах, у нас есть список листов максимум 25 (2) (2). (View Recon & Open Items) - это основные листы, на которых мои коды запущены, и добавьте новые листы до 23 листов). Я хочу обобщить данные из 10 листов, которые были сгенерированы с помощью просмотра разговора на вкладке «Сводка» из ROW 4. Например, имена листов (лист2, 5, 7, 9, 10, 12, 14, 17, 18, 19), здесь имена фиксированы, а количество листов не фиксировано, оно может быть 1-10.Loop using array with preifned sheets - VBA

Я попытался с помощью - это не работает для меня, как я мог бы определить неправильно

Dim sh As Worksheet 

For Each sh In Sheets(Array("Sheet2", "Sheet5", "Sheet7", "Sheet9", "Sheet10", "Sheet12", "Sheet14", "Sheet17", "Sheet18", "Sheet19")) 

Тогда мой код резюмировать - который работает хорошо, когда я сделать это отдельно, но я не могу определить и использовать с массивом, было бы полезно, если кто-либо из вас может помочь мне исправить это.

Счастливые выходные!

Спасибо за помощь!

С уважением Суреш

ответ

1

Используйте Рабочий лист .Names в виде строк варианта массива. По мере продвижения по каждому из них определите рабочий лист в With ... End With statement.

Dim w As Long, vWSs As Variant 

vWSs = Array("Sheet2", "Sheet5", "Sheet7", "Sheet9", "Sheet10", "Sheet12", "Sheet14", "Sheet17", "Sheet18", "Sheet19") 

For w = LBound(vWSs) To UBound(vWSs) 
    With Worksheets(vWSs(w)) 
     'here you will use .Range("A1") or .Cells(r, c) 
     'the prefix period means the parent worksheet is 
     'the one currently defined by the With ... End With 
    End With 
Next w 

Это мой собственный предпочтительный метод. Что касается вашего собственного For Each sh In ..., то такое же можно было бы использовать так.

Dim sh As Worksheet 

For Each sh In Sheets(Array("Sheet2", "Sheet5", "Sheet7", "Sheet9", "Sheet10", "Sheet12", "Sheet14", "Sheet17", "Sheet18", "Sheet19")) 
    With sh 
     'Use .Range or .Cells here 
    End With 
Next sh 
+0

Спасибо Expert, но я не могу получить код исправленный, будет полезно, если вы можете видеть это, но я не в состоянии полностью разместить его будет пытаться использовать asnwer и разместить его – suresh7860

+0

Что имя (ы) рабочих листов на вкладках имен внизу окна рабочего листа? – Jeeped

+0

@ Jeeped: ваш второй пример кода точно такой же, как и код OP, а именно цикл по массиву строк. Где улучшение? Вина должна быть с чем-то еще, или я пропущу очевидное? – user1016274