0

我将继续构建与从大型机检索的数据相关的宏,类似于我之前的问题中提到的内容。

我正在生成大量工作表,使用基于此处讨论的自动过滤器标准的宏扩展。出于参考目的,此代码的精简版本如下:

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 张或更多。我当前的代码改编自这个网站。我还查看了这篇SO 文章

我的代码如下:

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列表,这对我来说似乎很笨拙。我正在寻求解决方案甚至建议以开始处理此列表问题。

4

1 回答 1

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
于 2012-08-09T17:27:40.973 回答