несколько целей в нескольких ifs, в зависимости друг от друга VBA - PullRequest
0 голосов
/ 28 марта 2019

У меня есть таблица данных, в которой набор строк необходимо скрыть на основе критериев, установленных в другом наборе ячеек.Я написал что-то, что по сути является «кодированием пещерного человека», и, конечно, это не работает:)

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

Я написал только 2 набора строк, но это около 30 различных наборов (еще не написано)

Sub Worksheet_Change(ByVal Target As Range)
Set Target = Range(Cells(7, 8), Cells(7, 8))
Set Target1 = Range(Cells(3, 2), Cells(3, 2))
    If Target.Value = "No"
        Rows("8:29").EntireRow.Hidden = True
        If Target.Value = "Yes" And Target1.Value = "Half" Then
            Rows("22:29").EntireRow.Hidden = True
        ElseIf Target.Value = "Yes" And Target1.Value = "Full" Then
            Rows("8:29").EntireRow.Hidden = False
        End If
    End If

Set Target = Range(Cells(30, 8), Cells(30, 8))
Set Target1 = Range(Cells(3, 2), Cells(3, 2))
    If Target.Value = "No"
        Rows("31:56").EntireRow.Hidden = True
        If Target.Value = "Yes" And Target1.Value = "Half" Then
            Rows("47:56").EntireRow.Hidden = True
        ElseIf Target.Value = "Yes" And Target1.Value = "Full" Then
            Rows("31:56").EntireRow.Hidden = False
        End If
    End If
End Sub

Итак, в кратком изложении у меня есть две переменные в ячейке B3 (половина и полная))

и в строке H в указанных ячейках (например, H7, H30 и т. Д.) Да / Нет вариантов.строки 7, 30 (любая строка, имеющая опцию Да / Нет) являются заголовками тем с 8 по 29, детали этой темы включены.

если H7 (H30 ...) - Нет - все детали должны быть скрыты (строки 8-29; 31-56 и т. Д.) - значение в B3 не имеет значения.Если H7 (H30 ...) - Да, то значение в B3 имеет значение: Если H7 (H30 ...) - Да, а B3 - это наполовину - скрытые строки 22-29 (47-56 и т. Д.), Строки 8-21в данном случае не скрыто Если H7 (H30 ...) - Да, а B3 заполнено - строки 8-29 не скрыты.

Надеюсь, я хорошо это объяснил.

Пожалуйста, помогите мне улучшить мойкод, чтобы иметь возможность сделать поставленную цель.

1 Ответ

0 голосов
/ 28 марта 2019

Вы пропускаете , затем из ваших утверждений if, а также elseif

Вот код, который должен работать для вас:

Sub Worksheet_Change(ByVal Target As Range)

Set Target1 = Range(Cells(3, 2), Cells(3, 2))

' ------------

Set Target = Range(Cells(7, 8), Cells(7, 8))

If Target.Value = "No" Then
    Rows("8:29").EntireRow.Hidden = True
  ElseIf Target.Value = "Yes" And Target1.Value = "Half" Then
    Rows("22:29").EntireRow.Hidden = True
  ElseIf Target.Value = "Yes" And Target1.Value = "Full" Then
    Rows("8:29").EntireRow.Hidden = False
End If

' ------------

Set Target = Range(Cells(30, 8), Cells(30, 8))

If Target.Value = "No" Then
    Rows("31:56").EntireRow.Hidden = True
  ElseIf Target.Value = "Yes" And Target1.Value = "Half" Then
    Rows("47:56").EntireRow.Hidden = True
  ElseIf Target.Value = "Yes" And Target1.Value = "Full" Then
    Rows("31:56").EntireRow.Hidden = False
End If

End Sub

Поскольку заданное значение диапазона Target1 не изменяется, вам не нужно повторять его установку во всем коде.

...