Ошибка связанные выпадающие списки

 

lea

Пользователь

Сообщений: 74
Регистрация: 01.01.1970

Есть три списка a1,a…c3. На листе1 требуется создать зависимые списки.  
Как устранить сл. ошибки:  
1. Спискам присваиваю имена a,b, но третьему (с1,с2,с3) списку имя «с» — запрещает (недопустимое имя файла)?  
2. При вводе во втором, зависимом списке функции ДВССЫЛ($C$7) — выдает ошибку: «При вычислении «Источник» возникает ошибка.Продолжить?»?  
3. Бывает, что каким-то образом функция присваивается, но при имени третьего списка, например, сс — вместо с, не работает зависимость, т.е. во втором списке (лист1) не выводятся параметры с1,с2,с3?

 

Ни из объяснения, ни из файла ни чего не понял :(  
Но, на всякий случай, латинские буквы «C» и «R» в качестве имен применять нельзя, они зарезервированы: «С» — столбец; «R»- строка.

 

Пробуйте. Имена C и R действительно создать нельзя.

 

lea

Пользователь

Сообщений: 74
Регистрация: 01.01.1970

{quote}{login=Казанский}{date=16.08.2011 11:16}{thema=}{post}Пробуйте. Имена C и R действительно создать нельзя.{/post}{/quote}  

  Понял. Работает. А как быть тогда, когда оба списка на Листе1 образованы от объединенных ячеек? У меня опять выползает ошибка «Источника».

 
 

Юрий М

Модератор

Сообщений: 60810
Регистрация: 14.09.2012

Контакты см. в профиле

{quote}{login=lea}{date=17.08.2011 04:38}{thema=Re: }{post}{quote}{login=Казанский}{date=16.08.2011 11:16}{thema=}{post}{/post}{/quote} А как быть тогда, когда оба списка на Листе1 образованы от объединенных ячеек? У меня опять выползает ошибка «Источника».{/post}{/quote}Не используйте объединённые ячейки — облегчите себе жизнь.

 

lea

Пользователь

Сообщений: 74
Регистрация: 01.01.1970

{quote}{login=Юрий М}{date=17.08.2011 09:08}{thema=Re: Re: }{post}{quote}{login=lea}{date=17.08.2011 04:38}{thema=Re: }{post}{quote}{login=Казанский}{date=16.08.2011 11:16}{thema=}{post}{/post}{/quote} А как быть тогда, когда оба списка на Листе1 образованы от объединенных ячеек? У меня опять выползает ошибка «Источника».{/post}{/quote}Не используйте объединённые ячейки — облегчите себе жизнь.{/post}{/quote}  

  это 2 поля из бланка. надо чтобы графически виглядело именно объединенными ячейками.

 

lea

Пользователь

Сообщений: 74
Регистрация: 01.01.1970

{quote}{login=Маугли}{date=17.08.2011 07:46}{thema=}{post}Так?{/post}{/quote}  
Так и не догадался, что было поменяно так, как мне надо. Можно подробнее объяснить механизм?

 

Юрий М

Модератор

Сообщений: 60810
Регистрация: 14.09.2012

Контакты см. в профиле

>> это 2 поля из бланка. надо чтобы графически виглядело именно объединенными ячейками.  
===  
Многократно обсуждалось: Формат — Ячейка — Выравнивание — по горизонтали — ПО ЦЕНТРУ ВЫДЕЛЕНИЯ. Визуально ничем не будет отличаться от объединённых ячеек.

 

lea

Пользователь

Сообщений: 74
Регистрация: 01.01.1970

{quote}{login=Казанский}{date=16.08.2011 11:16}{thema=}{post}Пробуйте. Имена C и R действительно создать нельзя.{/post}{/quote}  

  Господа, так получается во второй выпадающей ячейке (зависимой) количество списков, которые можно было бы использовать, ограничено количеством букв латинского алфавита, исключая C и R.  

  Пример: =ДВССЫЛ(F5) обрабатывает только списки с ИМЕНАМИ от a…z  
       =ДВССЫЛ(F5&»_») обрабатывает только списки с ИМЕНАМИ вида a_…z_  

  А если списков штук сто будет как у меня?

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Называйте списки не только одной буквой, например: «lea», «lea_умный», «Я_знаю_32_буквы» :)

 

lea

Пользователь

Сообщений: 74
Регистрация: 01.01.1970

{quote}{login=vikttur}{date=18.08.2011 03:28}{thema=}{post}Называйте списки не только одной буквой, например: «lea», «lea_умный», «Я_знаю_32_буквы» :){/post}{/quote}  
в таком формате выдает ошибку. можно ли файл тогда для наглядности?

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Можно. Прикладывайте, на нем соорудим :)

 

lea

Пользователь

Сообщений: 74
Регистрация: 01.01.1970

{quote}{login=vikttur}{date=18.08.2011 03:32}{thema=}{post}Можно. Прикладывайте, на нем соорудим :){/post}{/quote}  

  Можно конечно. Не могу добиться выпадания списка lea  при такой функции в ячейке E7: =ДВССЫЛ(E7)

 

DV_68

Пользователь

Сообщений: 628
Регистрация: 22.12.2012

{quote}{login=lea}{date=18.08.2011 03:24}{thema=Re: }{post}А если списков штук сто будет как у меня?{/post}{/quote}  
Тогда попробуйте без ДВССЫЛ:

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

 

lea

Пользователь

Сообщений: 74
Регистрация: 01.01.1970

{quote}{login=DV}{date=18.08.2011 03:47}{thema=Re: Re: }{post}{quote}{login=lea}{date=18.08.2011 03:24}{thema=Re: }{post}А если списков штук сто будет как у меня?{/post}{/quote}  
Тогда попробуйте без ДВССЫЛ:{/post}{/quote}  

  хороший вариант. а если дописываются строки к списка, типа: a4,a5,…b4,b5,…? так скажем динамические списки?

 

lea

Пользователь

Сообщений: 74
Регистрация: 01.01.1970

{quote}{login=DV}{date=18.08.2011 03:47}{thema=Re: Re: }{post}{quote}{login=lea}{date=18.08.2011 03:24}{thema=Re: }{post}А если списков штук сто будет как у меня?{/post}{/quote}  
Тогда попробуйте без ДВССЫЛ:{/post}{/quote}  

  хороший вариант. а как быть, если списки будут дописываться, динамические?

 

lea

Пользователь

Сообщений: 74
Регистрация: 01.01.1970

а если списки будут динамическими?

 

lea

Пользователь

Сообщений: 74
Регистрация: 01.01.1970

в случае без ДВССЫЛ придется прописывать диапазрны, а во втором варианте — копировать имена списков на лист с выпадающими ячейками?

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

С динамическими списками «недоделанная» ДВССЫЛ() отказывается работат.  
присмотритесь к варианту DV. Формулку можно сократить, применив СМЕЩ(), для имени летучесть не страшна (как выяснилось не так давно).

 

DV_68

Пользователь

Сообщений: 628
Регистрация: 22.12.2012

{quote}{login=vikttur}{date=18.08.2011 04:01}{thema=}{post}…для имени летучесть не страшна (как выяснилось не так давно).{/post}{/quote}  
Ну это логично, т.к. имя само по себе летуче.  
А можно ссылочку на тему?

 

lea

Пользователь

Сообщений: 74
Регистрация: 01.01.1970

а как с функцией =ИНДЕКС реализовать динамические списки?

 

DV_68

Пользователь

Сообщений: 628
Регистрация: 22.12.2012

{quote}{login=lea}{date=18.08.2011 04:06}{thema=}{post}а как с функцией =ИНДЕКС реализовать динамические списки?{/post}{/quote}  
они в примере уже реализованы

 

DV_68

Пользователь

Сообщений: 628
Регистрация: 22.12.2012

Ошибся, хотя задумка была вложена)))

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Ссылки нет, есть цитата. Можно сказать, мини-урок.  

  ZVI. О летучести имен и УФ.  
«Мы часто неосознанно избегаем использования летучих функций в формулах имен, в частности, в формулах динамических диапазонов для выпадающих списков. При этом формулы становятся длинными и плохо читаемыми. Но дело в том, что опасения насчет пересчета формул таких имен при каждом пересчете формул листа (т.е общего замедления Excel) лишены оснований.  
Формула динамического диапазона, на основании которой строится выпадающий список, не пересчитывается при пересчете листа, независимо от того, используются в ней летучие функции или нет. Пересчет формул имен происходит только при попытке выбора значения из выпадающего списка.  
А вот формула ячейки, которая ссылается на имя с летучими функциями, действительно сама может стать летучей, но только если в формуле этой ячейки срабатывают условия для обращения к имени.  
Например, если имя ЭтоДата имеет в RefersTo летучую формулу =СЕГОДНЯ()  
то формула ячейки =ЕСЛИ(A1=1; ЭтоДата) станет летучей, только если A1=1  
Раз уж затронул эту тему, напомню, что формулы условного форматирования в ячейках видимой части экрана пересчитываются при любом изменении ячеек этой (и только этой) видимой части, или даже при перерисовке видимой части экрана от навигации. Поэтому и имена, на которые ссылаются формулы условного форматирования, также пересчитываются. Это нужно учитывать, но не бояться :-)  
Вывод: в формулах именованных диапазонов для выпадающих списков можно и полезно использовать летучие функции.»

 

lea

Пользователь

Сообщений: 74
Регистрация: 01.01.1970

{quote}{login=DV}{date=18.08.2011 04:07}{thema=Re: }{post}{quote}{login=lea}{date=18.08.2011 04:06}{thema=}{post}а как с функцией =ИНДЕКС реализовать динамические списки?{/post}{/quote}  
они в примере уже реализованы{/post}{/quote}  

  дописал к столбцам на листе2 a4,b4,c4 соответственно, но в выпадающих списках эти новые данные не отобразились.

 

lea

Пользователь

Сообщений: 74
Регистрация: 01.01.1970

задумка, кстати, тоже полезная, но нужна динамика ((

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

 

lea

Пользователь

Сообщений: 74
Регистрация: 01.01.1970

#30

18.08.2011 16:40:24

Супер! Постараюсь теперь переварить строку =общ ))

Одной из наиболее полезных функций проверки данных является возможность создания выпадающего списка, который позволяет выбирать значение из предварительно определенного перечня. Но как только вы начнете применять это в своих таблицах, то неизбежно столкнетесь с проблемой: нужно сделать один выпадающий список в Excel в зависимости от значения в другом. Другими словами, как сделать динамический многоуровневый связанный список?

Вот примеры таких задач:

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

Выглядеть это может примерно так:

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

  1. 1. Именованные диапазоны + функция ДВССЫЛ.
    • А как быть с пробелами?
  2. 2. Комбинация СМЕЩ + ПОИСКПОЗ

Начнем с более простого и стандартного подхода.

1. Именованные диапазоны + функция ДВССЫЛ.

Это может показаться сложным, но на самом деле это очень просто, и является отличным примером того, как можно применить ДВССЫЛ.

создаем зависимый выпадающий список

Рассмотрим небольшой пример. У нас есть перечень автомобилей различных марок. Расположим их каждый в отдельном столбце. В первой ячейке каждого столбца запишем производителя — Toyota, Ford, Nissan. Необходимо, чтобы после того, как первоначально мы выберем, например, Toyota, далее мы видели бы только модели этой марки, и ничего более. То есть, нам нужен двухуровневый связанный список.

Для начала создадим именованные диапазоны с моделями автомашин. Имя каждому из них присвоим в соответствии с маркой авто. Важно, чтобы имя каждого из них точно соответствовало значению, записанному в первой строке соответствующего столбца. Иными словами, если мы создаем именованный диапазон из ячеек A2:A100, то имя его должно совпадать со значением в A1 (регистр символов значения не имеет). Посмотрите на рисунке, как это выглядит.

Итак, у нас получилось 3 именованных диапазона — «toyota», «ford», «nissan». Делать их статическими (фиксированными) или динамически (автоматически пополняемыми) — решайте сами. О том, как создать автоматически пополняемый список, смотрите ссылку в конце этой статьи.

Далее в ячейке F3 создаем выпадающий список первого уровня с моделями автомашин так, как это показано в нашем примере на рисунке. Источник данных — первые ячейки каждого столбца. Обратите внимание, что инструмент проверки вводимых значений, при помощи которого мы создаем его, прекрасно работает как с вертикальными (по строкам), так и с горизонтальными (по столбцам) данными.

И далее выбираем того производителя, который нас интересует. К примеру, «Ford».

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

В этом нам поможет функция ДВССЫЛ. Функция ДВССЫЛ (INDIRECT в английском варианте) преобразует текст в стандартную ссылку Excel.

Если мы запишем

=ДВССЫЛ(«F3»)

то это будет равнозначно тому, что мы записали в ячейке формулу

=F3

Но зачем же так все усложнять? Все дело в том, что некоторые виды формул Excel почему-то отказывается воспринимать как источник данных для выпадающего списка. Вот и приходится идти на такие ухищрения.

«Фишка» функции ДВССЫЛ (или INDIRECT) в том, что она позволяет использовать текст точно так же, как обычную ссылку на ячейку . Это обеспечивает нам два ключевых преимущества:

  • Вы можете собрать текстовую ссылку (то есть записать ее в виде текстовой переменной), что удобно для определенных видов динамических ссылок.
  • Вы можете выбрать текстовые значения на листе и использовать их как ссылку на ячейку в формуле.

В примере на этой странице мы объединяем последнюю идею с именованными диапазонами для создания многоуровневого выпадающего списка. ДВССЫЛ преобразует обычный текст в имя, которое затем превращается в нормальную ссылку и источник данных для него.

Итак, в этом примере мы берем текстовые значения из А1:С1, выбираем из них какое-то одно. К примеру, «Ford». Поскольку такое же название у нас имеет один из именованных диапазонов, то и применяем ДВССЫЛ, чтобы преобразовать текст «Ford» в ссылку =ford. И вот уже ее мы употребляем как источник для связанного выпадающего списка.

Итак, в качестве источника значений применяем формулу

=ДВССЫЛ($F$3)

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

В результате функция возвращает в нашу таблицу Excel ссылку

=ford

Регистр символов в данном случае значения не имеет — все автоматически преобразуется в нижний регистр. И именно это и будет источником данных.

Изменяя значения в F3, мы автоматически изменяем и ссылку-источник для списка в F6. В результате источник данных для зависимого выпадающего списка в F6 динамически меняется в зависимости от того, что было выбрано в F3. Если выбираем Ford, то видим только каталог машин этой марки. Аналогично, если выбираем Toyota либо Nissan.

Многоуровневые выпадающие списки могут быть и более двух раз «вложены» друг в друга. В нашем примере можно добавить еще один, третий уровень. Он может содержать наименования каких-то запасных частей для выбранной ранее модели. Так формируются сложные перечни, в которых каждый следующий уровень зависит от предыдущего.

А как быть с пробелами?

Может случиться так, что название вашей группы товаров или категории будет содержать пробелы. А именованные диапазоны не позволяют, чтобы в их названии встречался пробел. Принято заменять их символом нижнего подчеркивания «_». Как же нам быть в этом случае? Ведь в таблице названия товарных категорий с символом нижнего подчеркивания будут смотреться несколько непривычно. Например, «Косметические_товары». С непривычки можно и просто забыть ввести нужный символ. И тогда наши формулы работать не будут.

Выход довольно прост. Создавайте именованные перечни, заменяя в их названиях пробелы символом нижнего подчеркивания. В самих же значениях, записанных в ячейках таблицы Excel, используйте обычные пробелы. А перед тем, как применять в формуле, мы их специальным образом обработаем при помощи функции ПОДСТАВИТЬ.

Внутри текстовой строки вместо одних символов она подставляет другие.Для того, чтобы вместо пробела появилось нижнее подчеркивание, можно употребить формулу вида

=ПОДСТАВИТЬ(F3;» «;»_»)

То есть, мы проведем предварительную обработку значений, чтобы они соответствовали правилам написания имён. Вместо =ДВССЫЛ($F$3) запишем

=ДВССЫЛ(ПОДСТАВИТЬ($F$3;» «;»_»))

Кавычки здесь не нужны, поскольку ПОДСТАВИТЬ возвращает текстовую строку. Если же в нашем тексте нет пробелов и он состоит из одного слова, то он будет возвращен «как есть». Следите только за тем, чтобы в начале и в конце обрабатываемой текстовой переменной у вас случайно не оказались пробелы. Ведь они тоже будут заменены на нижнее подчеркивание. Ну а чтобы не заниматься этим ручным контролем, усложните еще немного свою формулу при помощи функции СЖПРОБЕЛЫ. Она автоматически уберет начальные и конечные пробелы из текста. В итоге получим:

=ДВССЫЛ(ПОДСТАВИТЬ(СЖПРОБЕЛЫ($F$3);» «;»_»))

Ну а теперь — еще один способ, как сделать многоуровневый зависимый выпадающий список в Excel.

2. Комбинация СМЕЩ + ПОИСКПОЗ

Итак, у нас снова есть перечень марок и моделей автомобилей. Только записан он немного по-другому.

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

Первое условие — исходные данные должны быть отсортированы по маркам, а внутри марок — по моделям. То есть, нужно отсортировать по столбцу А, а затем — по В.

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

создаем выпадающий список

Далее нам нужно в D2 создать второй уровень, где будут только модели выбранной марки. В этот раз источник данных мы определим несколько иначе, чем ранее. Воспользуемся тем, что функция СМЕЩ может возвращать массив данных, который мы как раз и можем употребить в качестве наполнения нашего второго перечня. Но для этого ей нужно передать целых 5 параметров:

  • координаты верхней левой ячейки,
  • на сколько строк нужно сместиться вниз — A,
  • на сколько столбцов нужно перейти вправо — B,
  • высота массива (строк) — C,
  • ширина массива (столбцов) D.

как работает функция СМЕЩ

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

Традиционно точкой отсчета для функции СМЕЩ возьмем ячейку A1. Теперь нам нужно решить, на сколько позиций вниз и вправо нужно перейти, чтобы указать левый верхний угол нового перечня с моделями. Предположим, первоначально мы выбрали Ford.

На сколько шагов сместиться вниз? Применим функцию ПОИСКПОЗ, которая возвратит нам номер позиции первого вхождения «Ford».

=ПОИСКПОЗ($D$1;$A$1:$A$22;0)

Если первый раз нужное нам слово встретилось, к примеру, в 7-й позиции, то вычтем 1, чтобы получить количество шагов. То есть, начиная с первого значения, нужно сделать 6 шагов.

Третий параметр установим равным 1, так как нужно перейти на один шаг вправо из A в B. Мы находимся в начальной точке нашего диапазона. Теперь рассчитаем, на сколько ячеек вниз он будет продолжаться. Для этого подсчитаем, сколько раз «Ford» встречается в нашем перечне. Столько и будет значений вниз.

=СЧЁТЕСЛИ($A$1:$A$22;$D$1)

А теперь объединяем все это в СМЕЩ:

=СМЕЩ($A$1;ПОИСКПОЗ($D$1;$A$1:$A$22;0)-1;1;СЧЁТЕСЛИ($A$1:$A$22;$D$1);1)

Последняя единичка означает, что массив состоит из одной колонки.

В D2 создаем выпадающий список при помощи этого выражения. В нем будут только модели Ford, поскольку эта марка была выбрана ранее.

Аналогичным образом можно создать и третий уровень зависимого выпадающего списка.

Еще полезная дополнительная информация:

Хитрости »

1 Май 2011              198404 просмотров


Связанные выпадающие списки

Скачать файл, используемый в видеоуроке:

  Связанные выпадающие списки.xls (216,5 KiB, 3 084 скачиваний)


Чтобы понять о чем пойдет речь в статье сначала необходимо понимать что такое выпадающий список и как его создать. Теперь попробуем разобраться что значит выражение «связанный выпадающий список». Я бы еще назвал такой список зависимым. Т.е. когда список значений одного выпадающего списка зависит от значения, выбранного в другом выпадающем списке или просто забитого в ячейку. Представим ситуацию: есть ячейка А2. В ней создан выпадающий список со значениями: Овощи, Фрукты, Мясо, Напитки. А в ячейке В2 нам нужен такой список, чтобы значения этого самого списка изменялись в зависимости от того, какое значение мы укажем в ячейке А2 — т.е. список выбранной категории продуктов. Например выбрали в А2 значение Овощи — в В2 появился выпадающий список, содержащий значения: Морковь, Капуста, Картошка, Редиска, Помидоры. Выбрали в А2 Мясо — в В2 появился выпадающий список, содержащий значения: Говядина, Телятина, Свинина, Курица, Индейка. И т.д.

Подготовка
Для начала нам потребуется создать все эти списки. Что-то вроде этого:
Списки

Далее для каждого из этих списков необходимо назначить именованный диапазон. Создать можно любым способом из описанных в этой статье. Главное помнить — если сами списки расположено на листе, отличном от того, на котором списки выпадающие — то обязательно создавать именованный диапазон с назначением области действия — Книга.
В приложенном к статье примере диапазоны имеют имена категорий — их можно видеть в заголовках.
Если ваши категории содержат пробел — необходимо заменить его на нижнее подчеркивание (_) или удалить, т.к. в качестве именованного диапазона такое значение не подойдет и ничего в результате не получится.

Создание зависимых списков
В ячейке А2 создаем «список списков» — основной список, на основании значений которого будет создаваться второй список. Этот список может быть создан любым способом (как создать выпадающий список). Назовем его Список категорий.
В ячейке В2 потребуется создать список на основании формулы, хоть по сути и так же, как и остальные: вкладка Данные (Data)Проверка данных (Data validation)Список (List). Но теперь вместо прямого указания имени списка необходимо указать ссылку на именованный диапазон, который мы выберем в Списке категорий(ячейка А2), на основании его имени. В этом нам поможет функция ДВССЫЛ (INDIRECT). Просто записываем эту формулу в поле Источник (Source): =ДВССЫЛ($A2)
Список через ДВССЫЛ
На что обратить внимание: если вы планируете распространять такой список на столбец, то ссылка должна выглядеть именно так: $A2. Перед цифрой не должно быть знака доллара ($A$2 — неправильно). Иначе зависимый список будет всегда формироваться исключительно на основании значении ячейки А2.

Источник из другой книги
Сами списки товара могут находится и в другой книге. Если книга называется Книга со списком.xls и на Лист1 в ячейке А1 в этой книге находится имя нужного нам списка, то формула будет выглядеть так:
=ДВССЫЛ(«‘[Книга со списком.xls]Лист1’!»&$A$1)
На что обратить внимание: лучше всегда перед именем книги и после имени листа ставить апостроф — ‘. Так вы избежите проблем и недопонимания, если имя листа или книги содержит пробелы и иные специфические символы. В отличии от списков внутри одной книги в данном случае знак доллара должен быть и перед буквой и перед цифрой. В ином случае возможны ошибки (если, конечно, это не было сделано специально с пониманием того, что делалось).

Ограничения: данный способ создания списков хорош, но не обошлось и без ложки дегтя. Даже двух:

  1. обе книги должны быть открыты. Если вы закроете книгу со списками, то получите ошибку — выпадающие списки просто перестанут работать
  2. созданные подобным образом связанные списки не будут работать с динамическими именованными диапазонами

И ничего с этими ограничениями не поделать при подобном подходе.


Скачать пример

  Tips_Lists_Connect_Validation.xls (26,5 KiB, 18 128 скачиваний)

Так же см.:
Выпадающие списки
Именованные диапазоны
Динамические именованные диапазоны


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Добрый день!

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

Проблема заключается в следующем.
Нужно сделать так, чтобы в первом списке были только цифры, но для того, чтобы второстепенный список (связанный с первым) корректно работал, нужно через диспетчер имен назвать эти второстепенные списки именами значений из первого. Но, когда именем выступает цифра Excel ругается.

Т.е. задача такая.

Если в ячейке А1 из списка выбрана цифра «1», то в ячейке В1 — выпадает список 1,2,3
Если в ячейке А1 из списка выбрана цифра «2», то в ячейке В1 — выпадает список 4,5,6

Пробовал через формулу ЕСЛИ — тоже не получается :(

2 / 2 / 0

Регистрация: 21.04.2013

Сообщений: 98

1

Связанные выпадающие списки

09.02.2016, 12:04. Показов 3018. Ответов 11


Студворк — интернет-сервис помощи студентам

Добрый день!
На этом форуме пытался найти решение такой проблеме как «связанные выпадающие списки» (то есть список зависит от значения в другом поле). Нашел! Пытался реализовать, но не очень получилось.
Во вложении БД. Есть форма «1_Расписание» и подчиненная форма «Расписание и начисление».
В «1_Расписание» есть поиск записи, а поле «Наименование события» не вводиться данные, а подгружаются после поиска. Когда пользуюсь поиском в первый раз, то в поле подчиненной формы «Категория начисления» отбираются новые данные для ввода, после пользования поиском второй раз, в поле подчиненной формы в выпадающем списки определяются те же данные, которые имеют отношение к «первому поиску»
И еще есть одна проблема, как запретить ввод данных с клавиатуры данных, которые отсутствуют в справочнике, на примере, поля ФИО (подчиненная форма)
Заранее спасибо за помощь.



0



Эксперт MS Access

7336 / 4476 / 289

Регистрация: 12.08.2011

Сообщений: 13,561

09.02.2016, 12:09

2



0



2 / 2 / 0

Регистрация: 21.04.2013

Сообщений: 98

09.02.2016, 12:15

 [ТС]

3

Извините, но ссылка не работает..(((
А это можно реализовать только на mdb ?



0



Эксперт MS Access

7336 / 4476 / 289

Регистрация: 12.08.2011

Сообщений: 13,561

09.02.2016, 12:18

4

Цитата
Сообщение от Serzh663615
Посмотреть сообщение

Извините, но ссылка не работает..(((

а эта? Отбор по нескольким полям в форме



0



Nslava

458 / 75 / 13

Регистрация: 06.03.2015

Сообщений: 148

09.02.2016, 12:35

5

Цитата
Сообщение от Serzh663615
Посмотреть сообщение

после пользования поиском второй раз, в поле подчиненной формы в выпадающем списки определяются те же данные, которые имеют отношение к «первому поиску»

Чтобы обновить содержимое раскрывающегося списка «Поле» надо выполнить:

PureBasic
1
Поле.Rowsource=Поле.Rowsource

Чтобы запретить ввод других фамилий, надо зайти в схему данных и связать таблицы «Справочник субъекты» и «Расписание» по фамилии преподавателя

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



0



2 / 2 / 0

Регистрация: 21.04.2013

Сообщений: 98

09.02.2016, 18:16

 [ТС]

6

Подскажите, а код для какого события использовать?
Вторая часть вопроса; ограничить ввод нужно в поле ФИО (клиенты,в подчиненной форме) Как реализовать?



0



458 / 75 / 13

Регистрация: 06.03.2015

Сообщений: 148

09.02.2016, 21:58

7

Цитата
Сообщение от Serzh663615
Посмотреть сообщение

а код для какого события использовать?

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



0



2 / 2 / 0

Регистрация: 21.04.2013

Сообщений: 98

10.02.2016, 15:56

 [ТС]

8

Пробую описать процесс. Есть две формы: главная и подчиненная (куда вводятся клиенты). В главной форме поиск записи. После поиска подгружаются данные о событии (что , где и когда происходило) и появляется возможность ввода клиентов, которые посетили это событие.
Порядок действий таков: в верхней части выбрать событие (с поиске) и далее начать ввод клиентов в подчиненную форму «Субъект — ФИО — Категория начисления — Бронь — Участие — Причина отсутствия и тд (подчиненная форма — таблица внизу)»
После выбора в поиске события в поле «Категория начисления (подчиненная форма — таблица внизу)» можно выбрать только те Категории, которые имеют отношения к конкретному событию. …. Происходит ввод клиента. Далее если в поиске выбрать другое событие и попробовать ввести клиента, то в поле «Категория начисления (подчиненная форма — таблица внизу)» останется список категорий, который имеет отношение к прошлому выбранному через поиск, а не к текущему. Вот собственно все!
Вторая проблема: как ограничить ввод с клавиатуры ФИО клиентов (в поле ФИО (подчиненная форма — таблица внизу)), если вводимый клиент отсутствует в выпадающем списке, а соотвественно в справочнике.
Очень надеюсь на помощь с вашей стороны.



0



Nslava

458 / 75 / 13

Регистрация: 06.03.2015

Сообщений: 148

10.02.2016, 18:20

9

Лучший ответ Сообщение было отмечено Serzh663615 как решение

Решение

Более-менее понял. Вот поправленная база
Прописал событие:

PureBasic
1
2
3
4
Private Sub Form_Current()
On Error Resume Next
Me![Расписание и Начисление].Form![Категория начисления].RowSource = Me![Расписание и Начисление].Form![Категория начисления].RowSource
End Sub

ФИО в справочнике сделал уникальными
Связал в схеме данных таблицы «Справочник субъекты» и «Расписание и начисление» по ФИО (это по второму вопросу)

Связь по огромному количеству полей в схеме данных мне не понравилась. Тормозить будет

Миниатюры

Связанные выпадающие списки
 

Вложения

Тип файла: 7z БД выпадающ списки поправлен.7z (90.7 Кб, 53 просмотров)



1



Эксперт MS Access

7336 / 4476 / 289

Регистрация: 12.08.2011

Сообщений: 13,561

11.02.2016, 08:04

10

Цитата
Сообщение от Serzh663615
Посмотреть сообщение

как ограничить ввод с клавиатуры ФИО клиентов (в поле ФИО (подчиненная форма — таблица внизу)), если вводимый клиент отсутствует в выпадающем списке, а соотвественно в справочнике.

У поля со списком есть параметр «Ограничится списком» , поставьте «Да» и ввести неизвестного не смогут.



1



2 / 2 / 0

Регистрация: 21.04.2013

Сообщений: 98

11.02.2016, 11:11

 [ТС]

11

Большое спасибо, все работает, буду интегрировать)
«У поля со списком есть параметр «Ограничится списком» , поставьте «Да» и ввести неизвестного не смогут.» — Век живи, век учись



0



2 / 2 / 0

Регистрация: 21.04.2013

Сообщений: 98

16.02.2016, 23:20

 [ТС]

12

Все получилось, всем спасибо!



0



Возможно, вам также будет интересно:

  • Ошибка свечей накала рено дастер дизель
  • Ошибка связана или связанна
  • Ошибка свечей накала ауди
  • Ошибка свс лифан х60
  • Ошибка света шкода фабия

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии