使用VBA删除工作簿中的每个第二和第三个工作表

时间:2016-07-13 14:28:06

标签: vba excel-vba loops indices excel

我希望删除数百张工作簿中的第二张和第三张。因此,请保留1,4,7,10页...并删除其余的

我遇到了问题,因为我删除的每张纸都重置了索引,所以循环显示问题。

有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

RGA是正确的,你应该在删除时从最后一个循环到第一个。索引模式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

答案 1 :(得分:2)

托马斯&#39;答案可能是要走的路,这是另一种只运行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

答案 2 :(得分:0)

从结尾循环而不是从开始到结束(在任何编码语言中从列表中删除内容时总是很好的做法)

只要让计数器保持运行,最多可以计数三次并重置,确保首先将其设置正确,以便在最后一张纸上进行操作(也可以通过数学计算出最后一张纸是否为&#34; 1st&#34;,&#34; 2nd&#34;,或&#34; 3rd&#34; sheet)