如果工作表名称等于命名范围中的单元格

时间:2018-06-11 21:56:49

标签: excel vba excel-vba

我有一个工作簿,其中包含许多不同人员的标签,其中包含自己的数据。但是,在这些选项卡上工作的宏使用“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;”排除工作表我想要包含名称在某处保存在工作表范围内的工作表。

4 个答案:

答案 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

我在工作表“范围”上创建一个命名范围,该范围包含宏所作用的工作表。同样,它不是动态的,但编辑起来却容易得多。谢谢道格!