有条件地隐藏列

时间:2019-06-27 09:10:47

标签: excel vba

如果从属单元格之一为空白,我正在尝试隐藏列(Z,AA,AB,AC)。也就是说,如果Range1为空白,则整个Z列均被隐藏,Range2为空白,则整个AA列均被隐藏等。

我知道我可以实现简单的If Else / .EntireColumn.Hidden语句,但是我正在考虑使用下面的代码使其更整洁。有什么建议可以使它起作用吗?

Sub(test)
Dim cell As Variant
Dim i As Integer
Dim MyArray(1 To 4) As Range


 With ThisWorkbook.Worksheets("ReturnedHoldMail")

   Set MyArray(1) = Sheets("test1").Range("Range1")
   Set MyArray(2) = Sheets("test1").Range("Range2")
   Set MyArray(3) = Sheets("test1").Range("Range3")
   Set MyArray(4) = Sheets("test1").Range("range4")


    For i = LBound(MyArray) To UBound(MyArray)
         On Error Resume Next
            For Each cell In MyArray(i)

             If Len(cell.Value) < 1 Then

               cell.EntireColumn.Hidden = True
               Else
               cell.EntireColumn.Hidden = False

            End If

        Next

    Next

End With
End Sub

1 个答案:

答案 0 :(得分:0)

如果您希望隐藏的范围独立于要测试的空度范围,请尝试以下操作:

Sub test()
    Dim cell As Range
    Dim i As Integer
    Dim MyArray(1 To 4) As Range
    Dim HideArray(1 To 4) As Range
    Dim will_hide As Boolean

    Set MyArray(1) = Sheets("test1").Range("Range1")
    Set MyArray(2) = Sheets("test1").Range("Range2")
    Set MyArray(3) = Sheets("test1").Range("Range3")
    Set MyArray(4) = Sheets("test1").Range("Range4")

    Set HideArray(1) = Sheets("test1").Range("Range5") ' or eg. Sheets("test2").Range("Z:Z")
    Set HideArray(2) = Sheets("test1").Range("Range6")
    Set HideArray(3) = Sheets("test1").Range("Range7")
    Set HideArray(4) = Sheets("test1").Range("Range8")


    For i = LBound(MyArray) To UBound(MyArray)
        will_hide = True
        For Each cell In MyArray(i)
            If Len(cell.Value) > 0 Then
               will_hide = False
            End If
        Next
        HideArray(i).EntireColumn.Hidden = will_hide
    Next

End Sub