Я пытаюсь выполнить цикл над листами Excel, чтобы удалить строки, не содержащие «ALTW.ARNOLD_1» или «DECO.FERMI2». Я собрал следующий код, который работает на одном листе, но когда я петлю, цикл проходит через все листы, только выполняя удаление строки на первом листе. Листы пронумерованы от 1 до 365. Вот код:VBA Looping Over Sheets: удалять строки, если ячейка не содержит
Sub Delete_Rows()
For x = 1 To 365
Sheets(x).Select
Dim rng As Range, cell As Range, del As Range
Set rng = Intersect(Range("A1:A5000"), ActiveSheet.UsedRange)
For Each cell In rng
If (cell.Value) <> "ALTW.ARNOLD_1" And (cell.Value) <> "DECO.FERMI2" _
Then
If del Is Nothing Then
Set del = cell
Else: Set del = Union(del, cell)
End If
End If
Next cell
On Error Resume Next
del.EntireRow.Delete
Next x
End Sub
Спасибо! Проблема в том, что сброс дель после каждой петли был проблемой. Можете ли вы пояснить, что вы подразумеваете под этим: «безопаснее», чтобы избежать выбора/активации? в любом случае кажется более чистым сделать это так, как вы указали. –
Я имею в виду, что лучше обращаться непосредственно к объекту, такому как рабочий лист или рабочая книга, а не выбирать/активировать его, а затем полагаться на то, что он остается активным при работе с «Activesheet/Activeworkbook». Иногда это неожиданно ломается, так как другие листы/книги могут как-то стать активными до того, как ваш код будет выполнен. Например. пользователь нажимает на что-то, некоторые надстройки реагируют на событие и меняют активный объект и т. д. –