2012-08-09 76 views
0

我正在继续构建与从大型机检索到的数据相关的宏,与我的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

我的代码如下:

​​

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

除此之外,考虑到可能条件的数量,我也试图确定列表,集合或者甚至是一个数组(甚至可以使用循环)可以用来代替巨大的列表,这似乎很笨拙我。我正在寻求解决方法,甚至建议开始处理此列表问题。

回答

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 
+0

当然!如果和声明。它应该发生在我身上。有关将If和语句压缩到列表的任何建议? – JackOrangeLantern 2012-08-09 17:40:09

+0

请参阅我的编辑,了解如何使用一组表名。 – 2012-08-09 18:00:39

+0

嗯,非常有创意!我会搜索一个= !,也就是<>类型的条件,而不是使用错误检查机制。 VBA对于条件语言似乎需要一个非常不同的循环,数组和类似的心态......再次感谢蒂姆! =) – JackOrangeLantern 2012-08-09 18:08:57