Условно скрывающиеся колонны - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь скрыть столбцы (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 голосов
/ 27 июня 2019

Если вы хотите, чтобы скрытые диапазоны не зависели от диапазонов, тестируемых на пустоту, попробуйте следующее:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...