2016-08-16 2 views
0

Я пытаюсь удалить все листы, которые начинаются с Sheet5 до последнего листа, но я получил «индекс ошибки времени выполнения вне диапазона».excel vba delete sheets run-time error subscript out of range

Dim x as Long 
For x = 5 To ThisWorkbook.Worksheets.Count 
Application.DisplayAlerts = False 
ThisWorkbook.Sheets(x).Delete 
Application.DisplayAlerts = True 
Next 

В результате он удалил, но только Sheet5, Sheet7 и Sheet9, но Sheet6 и Sheet8 все еще там. Серая кнопка отладки, и я задаюсь вопросом, где ошибка. Пожалуйста, помогите, потому что держитесь борьбы на этом и не можете пройти. Большое спасибо!

ответ

1

Я уверен, что это проблема в вашей логике удаления листов. В начале цикла ThisWorkbook.Sheets(x).Delete удалит Sheet5.

Однако, как только лист5 будет удален, лист6 займет свое место, поэтому ThisWorkbook.Sheets (5) будет равен Sheet6.

Ваш счетчик x = 6 на этом этапе, поэтому он удалит Sheet7, который находится в позиции ThisWorkbook.Sheets (6).

Лист 8 займет свое место, и ваш счетчик будет x = 7 в этой точке. Это удалит Sheet9, который находится в позиции ThisWorkbook.Sheets (7).

Счетчик будет й = 8 Теперь и код будет пытаться удалить ThisWorkbook.Sheets (8), однако эта таблица не существует -> подстрочной из диапазона

+0

Чтобы добавить, VBA будет удалите, какой бы «лист» не был в этой позиции, поэтому, если «Таблицы» будут перетасованы или названы, он удалит любой из «Лист» в позиции «5» в начале. – DragonSamu

+0

большое спасибо @daZza, я не понял после удаленной Sheet5, Sheet6 станет Sheet5, поэтому мне просто нужно сохранить метод Sheet5 с использованием метода loop. –

+0

Правда, я подумал, что там сложно: P – daZza