隐藏2个范围的列

问题描述 投票:0回答:1

我必须在范围为空时隐藏列,并且我在不同的工作表中有2个范围来控制何时隐藏或取消隐藏这些列。我正在尝试使用带有2个变量的FOR循环,但我不工作,这是我的代码:

Sub HiddenColumns()

    Dim HiddenColumn1 As Range
    Dim HiddenColumn2 As Range

    Dim c As Range
    Dim d As Range


    Set HiddenColumn1 = Range("rngColumnHidden")
    Set HiddenColumn2 = Range("rngColumnHidden2")

    For Each c In HiddenColumn1
        For Each d In HiddenColumn2

            If c.Value = "" Then
                c.EntireColumn.Hidden = True
                If d.Value = "" Then
                d.EntireColumn.Hidden = True
                End If
            End If
        Next d
    Next c

End Sub

有一个范围,它工作得很好,但是当我试图隐藏另一个范围时,我遇到了问题,这是一个范围的代码:

Sub HiddenColumns()

    Dim HiddenColumn1 As Range
    Dim c As Range

    Set HiddenColumn1 = Range("rngColumnHidden")
    For Each c In HiddenColumn1

            If c.Value = "" Then
                c.EntireColumn.Hidden = True
            End If
    Next c

End Sub
excel vba excel-vba
1个回答
1
投票

OP评论后编辑

不要嵌套循环

Sub HiddenColumns()
    Dim c As Range

    For Each c In Range("rngColumnHidden").Rows(1).Cells
        c.EntireColumn.Hidden = (c.Value = "")
    Next c

    For Each c In Range("rngColumnHidden2").Rows(1).Cells
        c.EntireColumn.Hidden = (c.Value = "")
    Next c
End Sub

并且为了避免代码重复,您可以使用辅助子和代码

Sub HiddenColumns()
    HideColumns Range("rngColumnHidden")
    HideColumns Range("rngColumnHidden2")
End Sub

Sub HideColumns(columnsRng As Range)
    Dim c As Range
    For Each c In columnsRng.Rows(1).Cells
        c.EntireColumn.Hidden = (c.Value = "")
    Next c
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.