2015-12-15 2 views
1

Я пытаюсь пройти через все листы в книге. У меня есть следующий код, и он отлично работает; единственная проблема заключается в том, что он работает только при запуске макроса на первом листе; если я делаю это в любом другом, он просто останавливается после первого цикла.Looping через все листы

WS_Count = ActiveWorkbook.Worksheets.Count 
    For i = 1 To WS_Count 
     Dim ws1 As Worksheet 
     Set ws1 = ThisWorkbook.ActiveSheet 
     'if sheet contains evdre 
     Set c = ws1.Cells.Find("blabla") 
     If Not c Is Nothing Then 
      'do things 
     End If 
    Next i 

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

EDIT В разделе «do sth» я фактически создаю скрытые листы (скрытая копия той, в которой я активна); может ли это сделать счет? и, таким образом, работают только в первом листе

+0

Это я или нет, когда рабочий лист изменяется в этом коде? – Poof

+0

Хотя ответ iDevlop, вероятно, является более эффективным способом, если вы меняете одну строку в своем коде, это сработает для вас: 'Set ws1 = ThisWorbook.Sheets (I)', если в вашем '' do things' вы ссылку 'ws1' соответствующим образом. –

+0

Да, проблема в вашем коде просто, что ActiveSheet не изменяется, поэтому он несколько раз перебирает один и тот же лист. Вы можете a) изменить его, как объяснение Скотта, или b) использовать объектный цикл, подобный описанию iDevlop. б) является лучшим решением imho, потому что его легче читать и расширять. –

ответ

3
Dim ws As Worksheet, c as range 
    for each ws in ThisWorkbook.WorkSheets 
    Set c = ws.Cells.Find("blabla") 
    If Not c Is Nothing Then 
     'do things 
    End If 
+0

при запуске подсказки об ошибке, указывающей, что объект не поддерживает это свойство или метод: 'Для каждого ws в этой книге – user3540466

+0

@iDevlop - забыл бит Worksheets. 'Для каждого ws в этой книге. Рабочие таблицы. WorkSheet - это элемент в коллекции Worksheets. –

+0

Я исправил код (добавил .worksheets на второй строке) - Извините –

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