如果他们的名字属于数组,则删除工作表
我有一个工作簿与多个工作表命名像date如12-01-2015,12-02-2015,….等。我想创build一个代码,删除特定的工作表,如果他们的名字列在一个数组中。 我创build了一个代码,但它不起作用。 我的猜测是与“If”开头的错误语句有关。 我真的很感激任何提示,我错了
Sub DeleteSelectedSheets() Dim i As Long Dim Holidays() As Variant Holidays = Array("12-3-2015", "12-4-2015") For Each Worksheet In ActiveWorkbook If Worksheet(i).Name = Holidays(i) Then Application.DisplayAlerts = False Sheets(i).Delete Application.DisplayAlerts = True End If Next End Sub
这似乎工作:
Sub DeleteSelectedSheets() Dim i As Long Dim Holidays() As Variant Holidays = Array("12-3-2015", "12-4-2015") For i = Sheets.Count To 1 Step -1 If Sheets(i).Name = Holidays(0) Or Sheets(i).Name = Holidays(1) Then Application.DisplayAlerts = False Sheets(i).Delete Application.DisplayAlerts = True End If Next End Sub
Sub DeleteSelectedSheets() Dim Holidays As Variant Holidays = Array("Sheet1", "Sheet3", "Sheet5") For Each Sheet In ThisWorkbook.Sheets If UBound(Filter(Holidays, Sheet.Name)) > -1 Then Application.DisplayAlerts = False Sheet.Delete Application.DisplayAlerts = True End If Next End Sub
这应该工作得很好!
除了这个例外, 不pipe你使用的代码是什么 ,只剩下一张纸,而你试图删除它,它会抛出一个错误信息!
看LBound()
和UBound()
:
Sub DeleteSelectedSheets() Dim i As Long Dim Holidays() As Variant Dim wS As Worksheet Holidays = Array("12-3-2015", "12-4-2015") For Each wS In ActiveWorkbook For i = LBound(Holidays) To UBound(Holidays) If wS.Name <> Holidays(i) Then Else Application.DisplayAlerts = False wS.Delete Application.DisplayAlerts = True Exit For End If Next i Next wS End Sub
简单地尝试和删除数组中命名的工作表可能会更好。 当然,您需要在On Error Resume Next
下面进行操作,以防止命名的工作表不存在的情况。
Sub DeleteSelectedSheets() Dim h As Long, Holidays() As Variant Holidays = Array("12-3-2015", "12-4-2015") On Error Resume Next Application.DisplayAlerts = False For h = LBound(Holidays) To UBound(Holidays) Worksheets(Holidays(h)).Delete Next h 'alternate delete entire array (they need to be all there, fail on partial) 'Worksheets(Holidays).Delete Application.DisplayAlerts = True On Error GoTo 0 End Sub