2015-11-20 45 views
0

正在编写一个程序来删除所有月份名称的工作表。但是程序后删除片,它会给我一个自动化错误删除导致自动化错误的工作表

Sub DelSheet() 

Dim i As Integer 
Dim months() As String 
months() = Split("January February March April May June July Auguest September October November December") 

Dim ws As Worksheet 

Application.DisplayAlerts = False 


    For Each ws In Worksheets 
     For i = 0 To UBound(months) 

      If ws.Name = months(i) Then 
       ws.Delete 
      End If 

     Next i 
    Next ws 

Application.DisplayAlerts = True 



End Sub 

难道说以后我删除表,当它开始下一个循环中集(表)的元素已更改。

对于每个WS在工作表中

我迷路

回答

1

是 - 遍历集合从中你可能要删除的项目时,最好向后工作

Sub DelSheet() 

Dim i As Integer, n As Long, w as Long 
Dim months() As String 
months() = Split("January February March April May June July Auguest September October November December") 

Dim ws As Worksheet 

Application.DisplayAlerts = False 

    n = Worksheets.Count 
    For w = n to 1 Step - 1 
     Set ws = Worksheets(w) 
     For i = 0 To UBound(months) 

      If ws.Name = months(i) Then 
       ws.Delete 
       Exit For 
      End If 

     Next i 
    Next w 

Application.DisplayAlerts = True 



End Sub 
1

嗨这是另一种解决方案。在这种情况下我们只用一个循环

Sub DelSheet() 

    Const strMONTHS As String = "January February March April May June July Auguest September October November December" 

    Dim sh As Worksheet 
    Dim arrSheetsToDelete() As String 
    Dim i As Long 

    ' Loop through the sheets and create the array 
    For Each sh In ThisWorkbook.Sheets 
     If Not InStr(1, strMONTHS, sh.Name) = 0 Then 
      ReDim Preserve arrSheetsToDelete(i) 
      arrSheetsToDelete(i) = sh.Name 
      i = i + 1 
     End If 
    Next sh 

    'Delete the array of sheets 
    Application.DisplayAlerts = False 
    ThisWorkbook.Sheets(arrSheetsToDelete).Delete 
    Application.DisplayAlerts = True   

End Sub 

希望这有助于:)