несколько целевых объектов в нескольких ifs, зависящих друг от друга VBA

#excel #vba #if-statement #target

#excel #vba #if-оператор #цель

Вопрос:

У меня есть таблица данных, в которой набор строк должен быть скрыт на основе критериев, установленных в разных наборах ячеек. Я написал кое-что, что в основном называется «cave man coding», и, конечно, это не работает 🙂

Я создал if и попытался поместить ifs в 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 …) равно Yes, то значение в B3 имеет значение: если H7 (H30 …) равно Yes, а B3 равно половине — строки 22-29 скрыты (47-56 и так далее), строки 8-21 не скрыты в этом случае, если H7 (H30 …) равно Yes, а B3 заполнен — строки 8-29 не скрыты.

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

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

Комментарии:

1. Пожалуйста, укажите option explicit в первой строке вашего кода. Затем устраните ошибки компиляции, которые будут отображаться при добавлении этого оператора. Вы также должны указать использование диапазона и ячейки с именем книги и листа. например, Workbook_name. Имя_листника. Диапазон

2. Я погуглил, что нужно сделать после ввода строки, честно говоря, я в замешательстве. Не могли бы вы, пожалуйста, уточнить это подробнее?

Ответ №1:

В ваших операторах if отсутствуют then, а также 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 не изменяется, вам не нужно повторять ее настройку по всему вашему коду.