2014-11-18 4 views
0

Идея заключается в том, что я хочу оценить каждый Ws в Workbook для заданных критериев в vba. Если критерии выполнены, я хочу, чтобы он что-то делал. Если это не будет выполнено, я хочу перейти к следующему ws. Я знаю, что это просто. Любая помощь была бы действительно оцененаДля каждого цикла необходимо руководство

Вот что у меня есть.

Sub dataconsol() 
    Dim Ws As Worksheet 
    For Each Ws In ThisWorkbook.Worksheets 
     If ActiveSheet.Range("B9").Value = 1 Then 
      Range("A1").Value = 2 
     ElseIf Range("b9").Value <> 1 Then 

     End If 
    Next Ws 
End Sub 

ответ

5

Ваш код в порядке. Переключите ActiveSheet на W W, так как в вашем случае ActiveSheet всегда был «Sheet1».

Sub dataconsol() 

Dim Ws As Worksheet 

For Each Ws In ThisWorkbook.Worksheets 
    With Ws 
     If .Range("B9").Value = 1 Then 
      .Range("A1").Value = 2 
     ElseIf .Range("b9").Value <> 1 Then 
     End If 
    End With 
Next Ws 

End Sub 

Или, если вы хотите использовать ActiveSheet:

Sub dataconsol2() 

Dim Ws As Worksheet 

For Each Ws In ThisWorkbook.Worksheets 
    Ws.Activate 
    If Range("B9").Value = 1 Then 
     Range("A1").Value = 2 
    ElseIf Range("b9").Value <> 1 Then 
    End If 
Next Ws 

End Sub 
+0

Спасибо. Работает отлично. Можете ли вы объяснить, что означает «С Ws» и почему это необходимо? Рудиментарный вопрос, но я все еще собираю основы (без намерения). –

+1

Объяснение на С ... Заканчивается С заявлением: http://msdn.microsoft.com/en-us/library/wc500chb.aspx, длинный рассказ, каждый раз заменяет его на Ws.Range. Вы использовали ActiveSheet, не активируя каждый лист (так что он все время ссылался на Sheet1). –

+0

Я также добавил другую версию с Sheet.Activate, если вам нужно использовать ActiveSheet ('Ws.Activate' в этом случае) –

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