2013-11-26 5 views
2

Не могли бы вы рассказать мне, почему только каждый второй лист удаляется, однако если я отключу строку worksheets.delete, чем в поле сообщения, появятся все имена листов.Удаление рабочих листов с помощью цикла

Sub tor() 
    Dim wsz As Integer 

    wsz = Application.Worksheets.Count 

    For i = 2 To wsz 
     MsgBox Application.Worksheets(i).Name 
     Application.DisplayAlerts = False 
     Application.Worksheets(i).Delete 
    Next i 
End Sub 

ответ

2

Удалить лист в обратном порядке. Каждый раз, когда вы удаляете лист, индекс листа сдвигается.

Sub tor() 
    Dim wsz As Integer, i as Long 

    wsz = ThisWorkbook.Worksheets.Count 

    Application.DisplayAlerts = False 

    For i = wsz To 2 Step -1 
     ThisWorkbook.Worksheets(i).Delete 
    Next i 

    Application.DisplayAlerts = True 
End Sub 
3

Что происходит, что при удалении листа из коллекции Таблиц, следующий лист имеет индекс, который вы просто удалены. Затем вы увеличиваете i, пропуская следующий лист, который вы действительно хотели удалить.

Самое легкое решение - удалить рабочие листы, начиная с конца.

For i = ThisWorkbook.Worksheets.Count To 2 Step -1 
    Application.Worksheets(i).Delete 
Next i 
Смежные вопросы