【问题标题】:Delete every second and third sheet in a workbook using VBA使用 VBA 删除工作簿中的第二个和第三个工作表
【发布时间】:2016-11-16 04:59:43
【问题描述】:

我希望在包含数百张工作表的工作簿中删除第二张和第三张工作表。所以,保留工作表 1、4、7、10... 并删除其余工作表

我遇到了问题,因为我删除的每张表都会重置索引,因此使用 i 循环会出现问题。

有什么想法吗?

谢谢!

【问题讨论】:

  • 你能发布你尝试过的请求吗?
  • 您的表格名称是什么?它们是像 Sheet1、Sheet2、Sheet3... 还是随机词?

标签: vba excel loops indices


【解决方案1】:

RGA 是对的,你应该在删除时从最后一个循环到第一个。索引 mod 3 将为 1, 4, 7, 10 , 13, 16 .ect 返回 1。

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

【讨论】:

  • 太棒了。谢谢!
【解决方案2】:

虽然 Thomas 的回答可能是要走的路,但这是另一种方法,它只会运行一次 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

【讨论】:

  • 这当然是我会采用的方法,一口气删除 B-)
【解决方案3】:

从头到尾循环,而不是从头到尾循环(在 any 编码语言中从列表中删除内容时总是很好的做法)

只要保持计数器运行,最多计数为 3 并重置,首先确保正确设置它以作用于最后一张纸(也就是用数学计算最后一张纸是否是“第一张”, “2nd”或“3rd”工作表)

【讨论】:

    猜你喜欢
    • 2020-07-17
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    相关资源
    最近更新 更多