基于多个工作表标准删除工作表

时间:2012-08-09 16:56:05

标签: vba excel-vba excel

我将继续构建与从大型机检索到的数据相关的宏,类似于我previous questions中提到的。

我正在使用基于我所讨论的自动筛选条件here的宏扩展名生成大量工作表。出于参考目的,此代码的精简版本如下:

Sub AddSheets()

Dim RngOne As Range, cell As Range

For Each cell In RngOne

Sheets.Add After:=Sheets(1)

Sheets(2).Select

Sheets(2).Name = cell.Value

Next


End Sub

当我处理数据集时,我的用户可能有必要删除导出到其选定目的地后生成的工作表。但是,为了便于使用,我试图保留那些与我的宏相关的表格。 OR条件下保留的页数超过2,出于讨论目的,最多可达10或更多。我目前的代码改编自site。我还审核了这个SO article

我的代码如下:

Sub DeleteAllButNotedSheets()

Dim IndividualWorkSheet As Worksheet

Application.DisplayAlerts = False

For Each IndividualWorkSheet In ThisWorkbook.Worksheets

    If IndividualWorkSheet.Name <> "Sheet1" Or "Criteria" Or "TemplateSheet" Or "TemplateSheet2" Then
        IndividualWorkSheet.Delete
    End If

Next

Application.DisplayAlerts = True

End Sub

目前,代码导致类型不匹配错误。我正在寻求解决这个错误的困境。

除此之外,考虑到可能的条件数量,我还试图确定是否可以使用列表,集合甚至数组(给定循环)而不是巨型OR列表,对我来说似乎很笨拙。我正在寻求解决这个列表问题的修复甚至建议。

1 个答案:

答案 0 :(得分:2)

tmp = IndividualWorkSheet.Name  
If tmp <> "Sheet1" And tmp <> "Criteria" And _
   tmp <> "TemplateSheet" And tmp <> "TemplateSheet2" Then 
      IndividualWorkSheet.Delete     
End If

基于数组的方法:

Dim arr
arr = Array("Sheet1", "Criteria", "TemplateSheet", "TemplateSheet2")

If IsError(Application.Match(IndividualWorkSheet.Name, arr, 0)) Then
    IndividualWorkSheet.Delete    
End If