2016-07-13 5 views
-1

Im, желающий удалить второй и третий листы в книге с сотнями листов. Итак, сохраняйте листы 1,4,7,10 ... и удаляйте остальныеУдалить каждый второй и третий листы в книге с помощью VBA

У меня проблемы, потому что индексы сбрасываются на каждом листе, который я удаляю, так что петля с i's представляет проблему.

Любые идеи?

Спасибо!

+0

Можете ли вы разместить то, что вы пробовали. –

+0

Каковы имена ваших листов? Они похожи на Лист1, Лист2, Лист3 ... или Случайные слова? –

ответ

0

Loop от конца до начала, а не начала до конца (всегда хорошая практика при удалении вещей из списка в любой язык кодирования)

Просто держать счетчик работает, как вы идете, что считает до трех и сбрасывается, поэтому сначала убедитесь, что он правильно настроен для работы на последнем листе (ака с указанием математики, будет ли последний лист «1-м», «2-м» или «3-м» листом)

3

RGA is справа вы должны зацикливаться от последнего до первого при удалении. Index mod 3 вернет 1 для 1, 4, 7, 10, 13, 16 .ect.

Sub DeleteEvery2ndAnd3rdSheet() 
    Application.DisplayAlerts = False 

    Dim i As Integer 
    For i = Worksheets.Count To 1 Step -1 
     If i Mod 3 <> 1 Then Worksheets(i).Delete 
    Next 

    Application.DisplayAlerts = True 

End Sub 
+0

блестящий. Благодаря! – Nechama

2

Хотя ответ Томаса может быть путь, вот еще один подход, который будет работать только в Delete заявление один раз.

Sub Delete2nd3rdSheets() 

Dim sSheetsToRemove As String 
Dim i As Integer 

Dim ws As Worksheet 
For Each ws In ThisWorkbook.Worksheets 

    If ws.Index Mod 3 <> 1 Then 
     sSheetsToRemove = sSheetsToRemove & "," & ws.Name 
    End If 

Next 

sSheetsToRemove = Mid(sSheetsToRemove, 2) 

Dim arrDeleteSheets() As String 
arrDeleteSheets = Split(sSheetsToRemove, ",") 

Application.DisplayAlerts = False 
Worksheets(arrDeleteSheets).Delete 
Application.DisplayAlerts = True 

End Sub 
+0

Это, безусловно, подход, на который я мог бы пойти, удалить одним быстрым движением B-) –

+1

Довольно крутой Скотт –