Я пытаюсь пройти через все листы в книге. У меня есть следующий код, и он отлично работает; единственная проблема заключается в том, что он работает только при запуске макроса на первом листе; если я делаю это в любом другом, он просто останавливается после первого цикла.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» я фактически создаю скрытые листы (скрытая копия той, в которой я активна); может ли это сделать счет? и, таким образом, работают только в первом листе
Это я или нет, когда рабочий лист изменяется в этом коде? – Poof
Хотя ответ iDevlop, вероятно, является более эффективным способом, если вы меняете одну строку в своем коде, это сработает для вас: 'Set ws1 = ThisWorbook.Sheets (I)', если в вашем '' do things' вы ссылку 'ws1' соответствующим образом. –
Да, проблема в вашем коде просто, что ActiveSheet не изменяется, поэтому он несколько раз перебирает один и тот же лист. Вы можете a) изменить его, как объяснение Скотта, или b) использовать объектный цикл, подобный описанию iDevlop. б) является лучшим решением imho, потому что его легче читать и расширять. –