Отображение или скрытие строк на основе последующих критериев - PullRequest
2 голосов
/ 02 апреля 2020

Очень новичок в этом, так что извиняюсь за мое невежество. Надеюсь, это объяснено ясно.

Я собрал воедино некоторый код, который в настоящее время скрывает или показывает диапазон ячеек, на основе раскрывающегося списка недель с 1 по 5 (т.е. если выбрана неделя 1, недели 2 -5 скрыты и показываются только ячейки за неделю 1). В течение каждой недели у меня появляется последующее раскрывающееся меню с вариантами отображения строк для данной недели из 1 - 30 строк.

Поэтому выберите номер недели, чтобы отобразить соответствующие строки, затем выберите номер, чтобы выбрать количество строк, отображаемых для данной недели.

Проблема, с которой я сталкиваюсь, заключается в том, что при выборе данной недели все 30 строк для этой недели отображаются снова, даже если ранее пользователь выбрал показ только строк 1-15.

Я понимаю, что это потому, что когда выбрана неделя, проверяется только оператор и последующие не запускайте снова, но я не могу понять, как переставить, чтобы обеспечить сохранение последующего выбора.

Мне бы хотелось, чтобы каждую неделю показывалось только количество строк, определенных пользователем ранее, чтобы вы могли переключаться между неделями и видеть только то, что было выбрано ранее.

Т.е. если пользователь выбирает строки 1-15 для недели 1, переключается на неделю 2, а затем обратно на неделю 1, я хочу, чтобы строки 1-15 отображались только на неделе 1, а не все 30 строк.

Пример для «Недели 1» ниже, сабвуфер продолжается в течение 2-5 недель с аналогичным кодом.

'

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = Range("SELECT_WEEK_FEB").Address Then
        If Target.Value = "Week 1" Then
            Range("WEEK_1_FEB").EntireRow.Hidden = False
            Range("WEEK_2_FEB, WEEK_3_FEB, WEEK_4_FEB, WEEK_5_FEB").EntireRow.Hidden = True
        ElseIf Target.Value = "Week 2" Then
            Range("WEEK_2_FEB").EntireRow.Hidden = False
            Range("WEEK_1_FEB, WEEK_3_FEB, WEEK_4_FEB, WEEK_5_FEB").EntireRow.Hidden = True
        ElseIf Target.Value = "Week 3" Then
            Range("WEEK_3_FEB").EntireRow.Hidden = False
            Range("WEEK_1_FEB, WEEK_2_FEB, WEEK_4_FEB, WEEK_5_FEB").EntireRow.Hidden = True
        ElseIf Target.Value = "Week 4" Then
            Range("WEEK_4_FEB").EntireRow.Hidden = False
            Range("WEEK_1_FEB, WEEK_2_FEB, WEEK_3_FEB, WEEK_5_FEB").EntireRow.Hidden = True
        ElseIf Target.Value = "Week 5" Then
            Range("WEEK_5_FEB").EntireRow.Hidden = False
            Range("WEEK_1_FEB, WEEK_2_FEB, WEEK_3_FEB, WEEK_4_FEB").EntireRow.Hidden = True

        End If
    End If

     '------------------------------------------------------------------------------------------------------
     ' WEEK 1
 If Target.Address = Range("Week_1_Items_Feb").Address Then
        If Target.Value = "1-15" Then
            Range("Feb_Week_1_1_to_15").EntireRow.Hidden = False
            Range("Feb_Week_1_16_to_20, Feb_Week_1_21_to_25,Feb_Week_1_26_to_30").EntireRow.Hidden = True
        ElseIf Target.Value = "16-20" Then
            Range("Feb_Week_1_1_to_15, Feb_Week_1_16_to_20").EntireRow.Hidden = False
            Range("Feb_Week_1_21_to_25, Feb_Week_1_26_to_30").EntireRow.Hidden = True
        ElseIf Target.Value = "21-25" Then
            Range("Feb_Week_1_1_to_15, Feb_Week_1_16_to_20, Feb_Week_1_21_to_25").EntireRow.Hidden = False
            Range("Feb_Week_1_26_to_30").EntireRow.Hidden = True
         ElseIf Target.Value = "26-30" Then
            Range("Feb_Week_1_1_to_15, Feb_Week_1_16_to_20, Feb_Week_1_21_to_25, Feb_Week_1_26_to_30").EntireRow.Hidden = False
        End If
    End If'

1 Ответ

0 голосов
/ 02 апреля 2020

Если вы определите диапазон всей недели как «All_Week», тогда код будет коротким. Затем вы можете связать два критерия, добавив одну строку к каждому условию if. Если вы добавите «All» в «Week_1_Items_Feb», то вы увидите все строки для данного «SELECT_WEEK_FEB».

Кроме того, я заметил, что вам нужно, чтобы «Week_1_Items_Feb» был накопительным. Таким образом, для 16-20 вам нужен выход 1-20. Затем, я бы предложил - вместо того, чтобы упоминать его как 16-20, вы можете упомянуть как 1-20 в выпадающем списке.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = Range("SELECT_WEEK_FEB").Address Then
        Range("All_Week").EntireRow.Hidden = True
        If Range("Week_1_Items_Feb").Value = "All" Then
        Range(Target.Value).EntireRow.Hidden = False
        Else
        Range(Target.Value).Rows(Replace(Range("Week_1_Items_Feb").Value, "-", ":")).EntireRow.Hidden = False
        End If
    End If

     '------------------------------------------------------------------------------------------------------
     ' WEEK 1

    If Target.Address = Range("Week_1_Items_Feb").Address Then
        Range("All_Week").EntireRow.Hidden = True
        If Target.Value = "All" Then
        Range(Range("SELECT_WEEK_FEB").Value).EntireRow.Hidden = False
        Else
        Range(Range("SELECT_WEEK_FEB").Value).Rows(Replace(Target.Value, "-", ":")).EntireRow.Hidden = False
        End If
    End If
End Sub

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...