Главная » Статьи » VBA и макросы

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

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

 

Выпадающий список как валидация (вариант 1):

Будем использовать поле с валидацией. Шаги такие:

  1. Выделяем одну ячейку на листе, куда следует поместить выпадающий список с элементами.
  2. Переходим на вкладку "DATA" и нажимаем кнопку "Data Validation" -> "Data Validation...".
  3. Будем работать с первой вкладкой "Settings", предназначение остальных вкладок можно узнать в статье.
    Из списка "Allow" выбираем значение "List", в появившемся поле "Source" указываем диапазон всех возможных вариантов (список значений должен размещаться в 1-ом столбце или 1-ой строке), проще всего это сделать нажав пиктограму  и обычным способом на листе выделив смежные ячейки.
  4. Убедитесь, что переключатель "In-cell dropdown" активен, нажимаем "OK".

Как это выглядит:

Combobox validation

Особенности такого варианта:

  • Выпадающий список вписывается по размерах в одну ячейку.
  • Если ячейки не выделена то визуального различия с другими обычными ячейками нет.
  • Поведение списка при попытке ввода несуществующего значения можно задать самостоятельно на вкладке "Error Alert" меню "Data Validation...". Можно не показывать ошибок, можно предупреждать про неверные значения или совсем запретить их ввод.
  • Формат файла не меняется и документ можно сохранять с расширением .xlsx.
  • Не используется связная ячейка для результата, в текущую ячейку записывается именно то, что выбрали из списка.

 

Выпадающий список из Form Controls (вариант 2):

Больше возможностей можно получить создав список из элементов Form Controls, для этого нужна вкладка "Developer" ("Разработчик"). Этот вариант отличается от предыдущего результатом работы.

Шаги для создания выпадающего списка:

  1. На вкладке "Developer" ("Разработчик") в блоке инструментов "Controls" нажимаем кнопку "Insert".
  2. В появившемся окне из верхней части с шапкой "Form Controls" выбираем элемент "Combo Box (Form Control)".
  3. Теперь на листе левой кнопкой мыши рисуем прямоугольник такого размера, как должен быть наш выпадающий список. Сам графический элемент после этого будет готов. Теперь укажем набор возможных значений для него.
  4. На только что созданном элементе нажимаем правой кнопкой мыши, выбираем последний пункт меню "Format Control" и переходим на последнюю вкладку "Control", если она не открылась по-умолчанию.
  5. В поле "Input range" нужно указать диапазон смежных ячеек с вариантами выбора для списка, в поле "Cell link" указываем одну связную ячейку (зачем это написано ниже) и "Drop down lines" это количество видимых элементов при нажатии на выпадающий список.
  6. Когда все поля указаны нажимаем "OK" и размещаем наш элемент в нужное место на листе с правильными размерами.

Как это выглядит:

Combobox form control

Поскольку такого вида элемент графического интерфейса уже не интегрирован в ячейку листа как вариант 1, каким-то образом необходимо хранить активное значение выпадающего списка, чтобы взаимодействовать с другими элементами или ячейками листа. Существует связная ячейка, мы указывали её в шаге 5 при создании выше, куда записывается текущий номер значения из списка (в примере выше: январь - 1, февраль - 2...). Теперь когда мы выбираем другое значение из списка в связной ячейке меняется активный номер, и мы можем реагировать на эти изменения формулами. Заметим, обратная манипуляция допустима - если поменять вручную число в ячейке то поменяется и активное значение в выпадающем списке.

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

Особенности этого варианта:

  • Выпадающий список отображается на отдельном слое поверх листа и закрывает видимость ячеек.
  • Внешний вид элемента нельзя изменить, меняются только размеры.
  • Не поддерживается ручной ввод значений, выбрать можно только значения из списка либо сбросить полностью активное значение.
  • Используется связная ячейка для вывода результата. Выводится порядковый номер элемента в списке (последовательность начинается с 1) а не выбранное строковое значение.
  • Элементу можно назначить 1 обработчик в виде макроса. Он сработает при выборе другого значения из списка.
  • Если используется макрос для элемента, то файл должен сохраняться с расширением .xlsm.

 

Выпадающий список из ActiveX Controls (вариант 3):

Тип элемента, у которого много настроек и много возможностей. Детально про события читайте в статье, про разницу элементов Form и ActiveX другая статья.

Шаги создания:

  1. На вкладке "Developer" ("Разработчик") в блоке инструментов "Controls" нажимаем кнопку "Insert".
  2. В появившемся окне из верхней части с шапкой "ActiveX Controls" выбираем элемент "Combo Box (ActiveX Control).
  3. Теперь на листе левой кнопкой мыши рисуем прямоугольник такого размера, как должен быть наш выпадающий список. Сам графический элемент после этого будет готов. Теперь укажем набор возможных значений для него.
  4. Убеждаемся, что переключатель "Design Mode" активирован.
  5. Нажимаем кнопку "Properties" на той же панели управления.
  6. Отметим несколько полезных свойств, которые можно изменить на своё усмотрение:
    • BackColor - цвет фона элемента.
    • BackStyle - режим фона:
      • fmBackStyleTransparent - фон прозрачный, видно ячейки позади.
      • fmBackStyleOpaque - цвет фона указанный свойством BackColor.
    • BorderColor - цвет рамки вокруг элемента.
    • BorderStyle - режим рамки элемента:
      • fmBorderStyleNone - рамка отсутствует.
      • fmBorderStyleSingle - рамка вокруг элемента в 1 пиксель.
    • Font - шрифт значений и слов.
    • ForeColor - цвет текста.
    • LinkedCell - связная ячейка для вывода активного значения на лист.
    • ListFillRange - диапазон смежных ячеек с возможными вариантами выбора в списке.
    • MatchEntry - действие при ручном вводе символов:
      • fmMatchEntryFirstLetter - каждый введённый символ рассматривается как первая буква возможных значений и подбираются вероятные значения автоматически.
      • fmMatchEntryComplete - оценивается полное совпадение введённого текста с вариантами выбора и предлагается наиболее вероятное значение.
      • fmMatchEntryNone - совпадения со всеми значениями не проводится.
    • ShowDropButtonWhen - когда отображается справа кнопка выпадающего списка:
      • fmShowDropButtonWhenNever - никогда не отображается.
      • fmShowDropButtonWhenFocus - только когда фокус приложения расположен на элементе графического интерфейса.
      • fmShowDropButtonWhenAlways - отображается всегда, по-умолчанию.
    • SpecialEffect - различные эффекты (выпуклость, выдавливание...)
    • Style - режим ввода произвольных значений:
      • fmStyleDropDownCombo - комбинированный вариант, когда пользователь может вручную печатать в поле значение.
      • fmStyleDropDownList - вручную вводить значения нельзя, можно выбрать только из списка.
  7. Много разных свойств можно выбрать по вкусу, когда настройки закончили закрываем окно "Properties", выключаем режим "Design Mode" и уже можем работать с выпадающим списком. 

Если установить свойства "Linked Cell" вместе с "ListFillRange" получится выпадающий список аналогичный варианту 2.

Как это выглядит:

Combobox activex

Особенности этого варианта:

  • Возможность управления внешним видом элемента.
  • Выпадающий список отображается на отдельном слое поверх листа и закрывает видимость ячеек.
  • Можно вводить пользовательские символы при соответствующей установке свойства "Style".
  • Доступно 15 обработчиков на разные события выпадающего списка. Детальнее в статье.
  • Не обязательно указывать связную ячейку, вместо неё можно использовать обработчики событий.
  • При использовании макросов формат файла при сохранении должен быть .xlsm.

 

Категория: VBA и макросы | Добавил: Руслан_Савелов (19.08.2016)
Просмотров: 9124 | Рейтинг: 0.0/0
Всего комментариев: 0
ComForm">
avatar