2014-10-27 2 views
0

Я пытаюсь прокрутить каждый рабочий лист в книге, но он не работает. Я думаю, что это ActiveWorkbook.Worksheets не распознает каждый рабочий лист и работает только на рабочем листе Active. Любые предложения были бы замечательными! Я уверен, что это базовое решение, но, похоже, не может понять это. Благодаря!Петля для прохождения каждого рабочего листа в рабочей книге

Sub LoopThroughWorksheets() 
    Dim ws As Worksheet 

    For Each ws In ActiveWorkbook.Worksheets 
     If (ws.Name <> "Sheet1") And (ws.Name <> "Sheet2") And (ws.Name <> "Sheet8") And (ws.Name <> "Sheet42") Then 

      With ws 
       'code 
       'Sheets("Formula").Select 
       Range("FormulaRow").Copy 
       'Selection.Copy 
       ActiveSheet.Select 
       ActiveSheet.Range("A1").Select 
       ActiveSheet.Paste 
       Calculate 
       Range("Q1:X1").Select 
       Selection.Copy 
       Range("Q3:X3000").Select 
       Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ 
        SkipBlanks:=False, Transpose:=False 
       Application.CutCopyMode = False 
       Calculate 
       Selection.Copy 
       Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
        :=False, Transpose:=False 

      End With 
     End If 
    Next ws 

End Sub 
+0

«Я думаю, что это ActiveWorkbook.Worksheets не признающие каждый рабочий лист»: Это хорошо, чтобы иметь теорию, которая может объяснить проблему. Почему бы не добавить код в свой цикл, чтобы показать, действительно ли ActiveSheet изменяется на каждой итерации? – MartynA

+0

Я вижу, что это не меняется на каждой итерации, поэтому я думал об этом. Благодарю. –

ответ

1

Для With заявления, вам необходимо перейти каждый раз, когда вы хотите, чтобы ссылаться на этот объект с . использовать его так, как вы намеревающиеся. Но, если я понимаю ваш intnent, я думаю, самым простым решением было бы добавить в эту строку кода:

ws.Select 

следующим образом:

For Each ws In ActiveWorkbook.Worksheets 
    If (ws.Name <> "Sheet1") And (ws.Name <> "Sheet2") And (ws.Name <> "Sheet8") And (ws.Name <> "Sheet42") Then 

     ws.Select 

     With ws 
      'code 
      'Sheets("Formula").Select 
      Range("FormulaRow").Copy 

     ... 

, а затем вы должны также работать над изменением вещей например от Range("FormulaRow").Copy до .Range("FormulaRow").Copy, поэтому вы обязательно будете правильно использовать инструкцию With.

Надежда, что имеет смысл ...

+0

О да, это возвращается ко мне. К сожалению, FormulaRow находится на другой вкладке, и попытка копирования из не вкладки ws отключает меня. –

+0

С добавлением ws.Select он не пропускает листы, которые я не хочу выполнять. –

+0

Это определенно похоже, что вы никогда не активировали никаких листов, поэтому исходный ActiveSheet остается тем же, даже если вы зацикливаете массив WS в фоновом режиме. Возможно, вы захотите выйти из. Выберите, .Copy,. Вставьте в свой код и просто установите значения напрямую. Он делает больше работы и выглядит неряшливо, все экраны мигают в фоновом режиме. Просто делайте заявления. Листы (имя листа). Цвета (iRow, iCol) = ЦЕНА, ВЫ ХОТИТЕ УСТАНОВИТЬ Затем вы можете использовать iRow и iCol в качестве переменных и выполнять все виды условных проверок и циклов. Вместо ОДНОГО способа записи макроса. – peege

Смежные вопросы