У меня есть два выпадающих меню, где первое определяет, какие опции отображает второе. Я хочу сделать так, чтобы, если в первом раскрывающемся меню ничего не выделено, вы не могли ничего напечатать во втором.
Я работаю над интерактивной формой, которая будет использоваться на работе, где есть раскрывающееся меню (A1) для семейства продуктов, а затем выбор там вызывает второе раскрывающееся меню (A2), в котором отображаются продукты данного семейства. .
Для этого мы использовали три таблицы (с фиктивными данными):
ProductFamily (фрукты и овощи)
Фрукты (столбец 1 содержит список фруктов, а столбец 2 содержит цены)
Овощи (в столбце 1 указан список овощей, а в столбце 2 указана цена).
Мой коллега и я пытались разорвать форму, и мы обнаружили, что если в A1 не выбрана ни одна ProductFamily, мы можем набрать в A2 все, что захотим, без ошибки проверки, а после этого мы можем даже выбрать Product Семья и это все еще не вызывает проблемы в нашем нестандартном вводе.
Чтобы попытаться противостоять этому, я создал четвертую таблицу, которую я назвал Null. В нем была только одна клетка, и это было =""
.
Чтобы проверить это, я установил для параметра Проверка данных значение Список с источником =INDIRECT(IF(ISBLANK(A1),"Null","Fruit[Column1]"))
. С этим я обнаружил, что я все еще мог печатать в A2, если A1 был пуст, но если A1 не был пустым, я не мог печатать. Я поменял позиции так, что формула была: =INDIRECT(IF(ISBLANK(A1),"Fruit[Column1]","Null"))
и обнаружил, что хотя я мог видеть список фруктов, когда A1 был пуст, я все еще мог печатать все, что хотел. когда A1 не был пустым, у меня была только опция ""
, и все, что я набирал, вызывало ошибку.
Примечание: я попробовал и синтаксис =INDIRECT(IF(condition,"True","False")
, и синтаксис =IF(condition,INDIRECT("True"),INDIRECT("False")
и не обнаружил (как и ожидалось) никаких различий в поведении.
Я не знаю, почему часть True в выражении IF ведет себя так, но я наконец попытался,
=INDIRECT(IF(ISBLANK(A1),IF(ISBLANK(A1)=FALSE,,"Null"),"Fruit[Column1]"))
и обнаружил, что принудительное включение "Null"
в ложное условие заставило его работать так, что если я набрал что-нибудь в A2, когда A1 было пустым, он выдал ошибку.
Для финальной версии это было
=INDIRECT(IF(ISBLANK(A1),IF(ISBLANK(A1)=FALSE,,"Null"),A1 & "[Column1]"))
Неужели нет другого способа сделать это, кроме как копаться в VBA?