Автоматически обновлять диапазон проверки данных - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть раскрывающийся список, который изменяется в зависимости от другой ячейки, поэтому, если для другой ячейки установлено значение no, моя другая ячейка должна иметь в диапазоне проверки данных только stand-by, если она установлена ​​на yes, она должна тогда есть: real, phone, both все работает, но ...

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

Вот мой лист на картинке: https://imgur.com/a/56Nk1SG (я поместил описание на каждое изображение, чтобы сделать его более понятным).

примечание: Я знаю, что в Excel, если я расширяю массив, проверка данных работает, поэтому я попытался расширить его, сохранить его и затем импортировать в google-листы, но он не работал .. .и в Excel нет флажка и некоторые формулы не работают, поэтому я должен держать его в Google-листах

edit: Я знаю, что есть еще один похожий пост, но это не та же проблема ...

1 Ответ

0 голосов
/ 12 апреля 2019

На мой взгляд, лучший способ добиться этого - через VBA.

Шаги:

  1. Импорт параметров «Да» в диапазоне («A1: A4»). Диапазон («A1») включает Да в качестве заголовка.
  2. Выбор диапазона («A1: A4»).
  3. В начало - Вкладка «Стили» - Формат таблицы - Выбрать подсветку - Проверить диапазон и проверить «У моей таблицы есть заголовки».
  4. Выберите таблицу "Да" - Дизайн - Имя таблицы: tblYes.
  5. Импорт параметров «Нет» в диапазоне («B1: B2»). Диапазон («B1») включает Нет в качестве заголовка.
  6. Выбор диапазона («B1: B2»).
  7. Домой - Вкладка «Стили» - Формат таблицы - Выбрать подсветку - Проверить диапазон и проверить «У моей таблицы есть заголовки».
  8. Выберите таблицу «Нет» - Дизайн - Название таблицы: tblNo.
  9. Открыть редактор VBA. (Нажмите ALT и затем F11).
  10. Дважды щелкните по листу, который вы хотите условного форматирования (из поля в левой части страницы).
  11. Выберите Рабочий лист в левом поле над окном кода.
  12. Выберите Изменить в правом поле над окном кода.
  13. Введите приведенный ниже код и попробуйте.

Код:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    With ThisWorkbook.Worksheets("Sheet1") '<- Change sheet name if needed

        If Not Intersect(Target, .Range("E1:E10")) Is Nothing And Target.Count = 1 Then  '<- Change range if needed. Check if the change included in our range.

            Application.EnableEvents = False

                If Target.Value = "Yes" Or Target.Value = "No" Then '<- Case sensitive. Check the value insert if it is Yes or No

                    With .Cells(Target.Row, "F").Validation

                        .Delete '<- Clear previous valitation
                        If Target.Value = "Yes" Then '<- Check if the answer if Yes
                            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                            xlBetween, Formula1:="=INDIRECT(""tblYes[Yes]"")"
                        ElseIf Target.Value = "No" Then '<- Check if the answer if No
                            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                            xlBetween, Formula1:="=INDIRECT(""tblNo[No]"")"
                        End If

                    End With

                Else '<- If the value insert is NOT Yes or No

                    .Cells(Target.Row, "F").Clear '<- Clear format & contents next to change cell
                    MsgBox "Insert Yes or No!" '<- Message box prompt for Yes or No

                End If

            Application.EnableEvents = True

        End If

    End With

End Sub

Изображение листа, включая tblYes & tblNo:

enter image description here

Изображение редактора VBA:

enter image description here

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