使用字符串的VBA Excel宏删除表

Sam*_*iko 5 excel vba excel-vba

我使用了一些VBA代码来搜索工作簿中的某个字符串的所有工作表名称,我们称之为"文本".当它找到带有该字符串的工作表时,它应该删除该工作表.但是让我们说名称中有四个带有"文本"的表格(名为文本1,文本2,文本3文本4),而不是删除所有四个,它删除文本1文本3.它将第2和第4个保留为未删除.然后,如果我再次调用宏,它将删除文本2,但保留文本4.最后,如果我再次单击它会删除文本4.我无法解决为什么它看起来应该工作.

    Dim i As Integer, n As Integer
    n = ThisWorkbook.Worksheets.Count
    i = 1
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Do
        On Error Resume Next
        If InStr(1, Sheets(i).Name, "Text") Then Sheets(i).Delete
        On Error GoTo 0
        i = i + 1
    Loop Until i = n
    Application.DisplayAlerts = True

    Application.ScreenUpdating = True
Run Code Online (Sandbox Code Playgroud)

Ror*_*ory 13

您需要向后循环以避免跳过工作表:

Dim i As Integer, n As Integer
n = ThisWorkbook.Worksheets.Count

Application.DisplayAlerts = False
Application.ScreenUpdating = False
For i = n to 1 step -1
    On Error Resume Next
    If InStr(1, Sheets(i).Name, "Text") Then Sheets(i).Delete
    On Error GoTo 0
Next i
Application.DisplayAlerts = True

Application.ScreenUpdating = True
Run Code Online (Sandbox Code Playgroud)

否则,如果代码删除了纸张1,则纸张2变为纸张1,但是i增加到2,因此永远不会处理原始纸张2.

  • + 1很好地完成 (4认同)