Vba 从2个范围隐藏列

Vba 从2个范围隐藏列,vba,excel,Vba,Excel,当一个范围为空时,我必须隐藏列,并且我在不同的工作表中有两个范围来控制何时隐藏或取消隐藏这些列。 我尝试使用带有2个变量的FOR循环,但我不工作,这是我的代码: Sub HiddenColumns() Dim HiddenColumn1 As Range Dim HiddenColumn2 As Range Dim c As Range Dim d As Range Set HiddenColumn1 = Range("rngColumnHidde

当一个范围为空时,我必须隐藏列,并且我在不同的工作表中有两个范围来控制何时隐藏或取消隐藏这些列。 我尝试使用带有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

在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

你说的“不起作用”到底是什么意思?它给出了错误或者没有隐藏你认为它应该隐藏的东西?我尝试了你的第一个代码,它对我很好。按照现在的设置方式,
HiddenColumn
将在
c
为空时隐藏,但
HiddenColumn2
仅在
c
d
均为空时隐藏。这些是您想要的条件吗?它在以下行中给出了错误:d.EntireClumn.Hidden=True我真的想独立隐藏HiddenColumn和HiddenColumn2…错误是什么?您是如何定义范围“rngcolumnhiden2”的?它在第二个字段中给了我一个错误:“c.EntireColumn.Hidden=(c.Value=”“)”错误是类型不匹配这很可能不是代码的问题,而是单元格中的值。您确定没有错误吗?可能您的命名范围不是“1行”,因此请参阅编辑的回答是!我用两行定义了第二个范围,我没有意识到!我认为一行就足够了,因为列是一样的。。。谢谢现在它开始工作了@DisplayName:出于好奇-当范围定义为多行时,是否能够复制错误?我被难倒了,为什么只有“范围”(“rngColumnHidden”)”对我来说效果很好。是的,如果我用两行定义它,它会同时通过两行,因此它不是真正合乎逻辑的,但它不会给我任何错误,所以我试图找出我做的不同之处。谢谢