我有一个工作簿,其中包含许多不同人员的标签,其中包含自己的数据。但是,在这些选项卡上工作的宏使用“If sheet name Then”,但它不是动态的。有没有办法根据命名范围使其动态化?
即。范围将是John,Ben,Steve等名称列表,宏将搜索工作表名称是否等于该范围中的一个名称。这是当前代码的一部分:
Sub apply_exclusion_format()
Dim sht As Worksheet, r As Range
On Error Resume Next
For Each sht In Worksheets
Set r = sht.Cells.Range("A:AY")
If sht.Name <> "MASTER" And sht.Name <> "Exclusions" _
And sht.Name <> "Bands" And sht.Name <> "Matrix" _
And sht.Name <> "Macros" Then
sht.Select
r.Select
而不是使用“sht.Name&lt;&gt;”排除工作表我想要包含名称在某处保存在工作表范围内的工作表。
答案 0 :(得分:0)
Dim sht As Worksheet
On Error Resume Next
For Each sht In Worksheets
Thisworkbook.Worksheets("sheetwhererangeis").Range("A1:A5").Find sht.name
只需定义你的范围并寻找sht.name等泡沫,冲洗并重复
答案 1 :(得分:0)
像这样的东西 - 例如检查工作表是否在&#34;排除&#34;工作表名称 -
Function IsExcludedSheet(sName)
IsExcludedSheet = Not IsError(Application.Match(sName, Range("EXCLUDED"), 0))
End Function
用法:
Sub apply_exclusion_format()
Dim sht As Worksheet, r As Range
On Error Resume Next '<<< do you really need this?
For Each sht In Worksheets
Set r = sht.Cells.Range("A:AY")
If Not IsExcluded(sht.Name) Then '<<< call the function here
sht.Select
r.Select
答案 2 :(得分:0)
嗯,VBA中有几种创新方法可以解决您的问题。我们可以进行工作表名称搜索,在以下方面更有活力。
假设带有工作表名称的范围名称为 rngSheetInclusions 。
方法#1 :使用COUNTIF:
COUNTIF函数计算符合提供条件的单元格,返回找到的出现次数。如果没有单元符合条件,则COUNTIF返回零。任何正数表示找到的值。这意味着您可以使用大于运算符(&gt;)对COUNTIF的结果运行简单测试以强制获取TRUE或FALSE结果
Sub apply_exclusion_format()
Dim sht As Worksheet, r As Range
On Error Resume Next
For Each sht In Worksheets
Set r = sht.Cells.Range("A:AY")
If Application.WorksheetFunction.CountIf(Range("rngSheetInclusions"),sht.Name) > 0 Then
'Do whatever you want to
End If
Next
End Sub
方法#2 :作为替代方案,您可以使用使用MATCH函数而不是COUNTIF的公式。如果找到则MATCH函数返回匹配的位置(作为数字),如果未找到则返回#N / A.通过将MATCH包装在ISNUMBER内,当MATCH找到匹配时,最终结果为TRUE,当MATCH返回#N / A时,结果为FALSE。这是要使用的If语句:
If Application.WorksheetFunction.IsNumber(Match(sht.Name, Range("rngSheetInclusions"), 0)) Then
方法#3 :使用VBA的Find方法:您还可以使用下面的方法替换for循环中的If语句,以获得所需的结果。
If Not Range("rngSheetInclusions").Find(What:=sht.Name, Lookat:=xlWhole) Is Nothing Then
答案 3 :(得分:0)
我是根据Doug Coats的建议得到的。代替这个:
Sub apply_exclusion_format()
Dim sht As Worksheet, r As Range
On Error Resume Next
For Each sht In Worksheets
Set r = sht.Cells.Range("A:AY")
If sht.Name <> "MASTER" And sht.Name <> "Exclusions" _
And sht.Name <> "Bands" And sht.Name <> "Matrix" _
And sht.Name <> "Macros" Then
这就是我将其更改为:
Dim sht As Worksheet, rFound As Range
On Error Resume Next
For Each sht In Sheets
Set rFound = ThisWorkbook.Worksheets("Ranges").Range("Reviewer_sheet_names").Find(sht.Name)
If Not rFound Is Nothing Then
我在工作表“范围”上创建一个命名范围,该范围包含宏所作用的工作表。同样,它不是动态的,但编辑起来却容易得多。谢谢道格!