2016-09-21 60 views
1

我有下面的VBA,它遍历array()公式中的所有命名选项卡。我想这是个动态范围的,而不是键入到阵列()的值,它引用在具有这些值的工作表中的范围内,它的动态,当我添加更多定义阵列按名称范围的变体vba

Sub Filter_To_Send() 

Dim WshtNames As Variant 
Dim WshtNameCrnt As Variant 

WshtNames = Array("RASC", "RSUV", "SBKP", "RGRN", "SBTK", "RWAS", "RABT", "RHAY", "RLEX", "RARM", "RBCK", "RBER", "RCCP", "RDAL", "RHEB", "RSST", "RMST", "RMIA", "REHV", "RNBY", "RNOF", "RUTC", "RSCS", "RSJO", "RSCQ", "RSHA", "RAWP", "SART", "SASK", "SALC", "SNHQ", "SOEX", "SPHL", "SSHP", "SMRN") 

For Each WshtNameCrnt In WshtNames 
With Worksheets(WshtNameCrnt) 
    .Range("A5").AutoFilter field:=16, Criteria1:="<>0" 
End With 
Next WshtNameCrnt 

End Sub 

谢谢!

回答

1

如果工作表名称的列表存储在工作表“配置”在A1开始于:

Sub Filter_To_Send() 

    Dim c As Variant 
    Dim rngSheets As Range 

    With Sheets("Config") 
     Set rngSheets = .Range(.Range("A1"), .Cells(.Rows.Count, 1).End(xlUp)) 
    End with 


    For Each c In rngSheets.Cells 
     With Worksheets(c.Value) 
      .Range("A5").AutoFilter field:=16, Criteria1:="<>0" 
     End With 
    Next c 

End Sub 
+0

@ tim.williams - 感谢这么多。当运行时错误'9' - 下标超出范围,当它进入“With Worksheets(c.Value)”行时。 –

+0

这将表明在活动工作簿中没有带有该名称的工作表。你的工作表列表是否有标题?如果是,那么将'.Range(“A1”)'改为'.Range(“A2”)' –

+0

明白了。我尝试将选项卡列表添加到现有选项卡,并将其从A1移至列表开始的位置。但是,听起来更容易拥有自己的专用选项卡。非常感谢!! –