Excel 在VBA中沿命名范围循环,并为范围本身(而不是范围内的数据)提供hidden=true/false输出

Excel 在VBA中沿命名范围循环,并为范围本身(而不是范围内的数据)提供hidden=true/false输出,excel,vba,for-loop,Excel,Vba,For Loop,我已将许多列命名为范围,例如。 DesCond1、DesDiff1、Comparison1、DesCond2、DesDiff2等。。。 我有一些按钮,它们使用宏来切换不同的可见或隐藏列。我已经添加了用于其中一个按钮的代码。 目前,我已经编写了单独显示或隐藏每个范围的代码,但我希望有一个代码可以计算具有类似名称的范围的数量(DesCond1,DesCond2..DesCond(n)),然后在每个范围中循环自动检查隐藏状态,这样我就不必每次添加更多数据时都添加到代码中。这是到目前为止我的代码。到目前

我已将许多列命名为范围,例如。 DesCond1、DesDiff1、Comparison1、DesCond2、DesDiff2等。。。 我有一些按钮,它们使用宏来切换不同的可见或隐藏列。我已经添加了用于其中一个按钮的代码。
目前,我已经编写了单独显示或隐藏每个范围的代码,但我希望有一个代码可以计算具有类似名称的范围的数量(DesCond1,DesCond2..DesCond(n)),然后在每个范围中循环自动检查隐藏状态,这样我就不必每次添加更多数据时都添加到代码中。这是到目前为止我的代码。到目前为止,这一切都很好

Sub ComparisonToggle1()
Dim ComparisonAll As Range, R_Cond As Range, R_Diff As Range

'set first of each range as identifier for decisions
Set R_Comp = Range("Comparison1")

'set all ranges under one name
Set CompAll = Union(Range("Comparison1"), Range("Comparison2"), Range("Comparison3")) 'name and add when new tests are added

If R_Comp.EntireColumn.Hidden = False Then           'False
    CompAll.EntireColumn.Hidden = True                  'hide all
ElseIf R_Comp.EntireColumn.Hidden = True Then        'True
    CompAll.EntireColumn.Hidden = False                 'vis all
End If

End Sub

这是对工作簿中的所有名称进行循环,但需要为其指定要筛选的组:

Option Explicit
Sub Test(Group As String)

    Dim MyName As Name
    For Each MyName In ThisWorkbook.Names
        If MyName.Name Like "*" & Group & "*" Then
            Range(MyName).EntireColumn.Hidden = True
        End If
    Next MyName

End Sub
Sub Main()

    'This procedure calls the Test procedure feeding the variable Group as "Descond"
    Test "Descond"

End Sub

如何向宏提供每次要隐藏的组?例如:使用“DesCond*”这样的描述,它会在所有命名范围中循环使用该名称和结尾的数字。此代码的作用是:如果MyName.Name像“2”&group&“,@JadeySwan McCay过滤范围名称。。。在您的示例中,
Group
将是
DesCond
。此循环将遍历所有指定的范围,但只对包含
DesCond
的范围执行代码。但是2是一个输入错误。所以我会在代码的某个地方使用
group=“DesCond”
。。。我将使用什么代码隐藏这些范围。我不能使用
MyName.entireclumn.Hidden=True
。。。。如何将其更改为范围选择?
MyName
是一个
Name
变量,而不是一个范围,因此您不能像处理范围那样处理它。您可以使用
Range(MyName).EntireColumn.Hidden=True
代替@JadeySwan-McCay。至于怎么称呼这个,就像我的编辑一样。
Option Explicit
Sub Test(Group As String)

    Dim MyName As Name
    For Each MyName In ThisWorkbook.Names
        If MyName.Name Like "*" & Group & "*" Then
            Range(MyName).EntireColumn.Hidden = True
        End If
    Next MyName

End Sub
Sub Main()

    'This procedure calls the Test procedure feeding the variable Group as "Descond"
    Test "Descond"

End Sub