Я пытаюсь l oop пролистать листы книги и удалить тех, чье кодовое имя содержит строку «Лист», но очистить только ячейки всех других листов, кроме листа «Сводка», который я хотел бы оставить без изменений. Код иногда удаляет предназначенные листы, но иногда это не так. В этих случаях я вручную заходил в окно vba, запускал все с «Step Into» в отладчике, но, как ни странно, тогда он работал совершенно нормально. Почему это происходит? Благодарим вас за помощь!
Редактировать 1: в тех случаях, когда удаляемые листы не удаляются, их ячейки очищаются, что указывает на проблему с оператором InStr. Я попытался использовать Как , но безрезультатно.
Редактировать 2: код также работает правильно при нажатии кнопки воспроизведения в окне VBA. Случаи, когда он не работает, это когда я запускаю этот код с помощью ActiveX или кнопки формы или когда я выбираю макрос для запуска на вкладке разработчика. Я могу подтвердить, что макрос всегда запускается, когда я нажимаю кнопку activex, потому что он изменяет некоторые значения на листе до того, как достигает кода, приведенного ниже.
Редактировать 3: листы, которые код пытается удалить, были недавно добавлено другим макросом. Я думаю, что кодовое имя листов появляется только после того, как я открываю vba , как это, кажется, имеет место: макрос не работает должным образом при выполнении из кнопки, я открываю и закрываю редактор vba , а затем с помощью макроса с помощью кнопки работает.
Вот код:
Application.DisplayAlerts = False
For Each ws In ThisWorkbook.Sheets
If InStr(ws.CodeName, "Sheet") > 0 Then
ws.Delete
ElseIf ws.CodeName <> "Summary" Then
ws.Cells.Clear
End If
Next ws
Application.DisplayAlerts = True