Remkomplekty.ru

IT Новости из мира ПК
7 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba excel listbox свойства

VBA Excel ListBox Multiselect

«VBA Excel ListBox Multiselect»
Привязка диапазона данных к ListBox.
Добавление, удаление пунктов списка.
Сортировка списка и множественный выбор элементов.

ListBox или «окно со списком» – это один из элементов управления, который может быть расположен на форме для предоставления пользователю возможности выбора одного или нескольких элементов (пунктов) из предоставленного множества (списка) вариантов …

    VBA предоставляет две возможности заполнения списка ListBox

  • Через свойство RowSource (источник строк) в список загружается определенный диапазон (колонка ячеек). В этом случае добавление новых пунктов в список или удаление существующих из списка в процессе выполнения макросов VBA не возможно… (по крайней мере, до момента присвоения свойству RowSource значения пустой строки).
  • Через методы AddItem и RemoteItem (добавление или удаление пунктов списка)… Повторю, что для такой возможности, свойство RowSource должно иметь пустое значение.
  • Разместить на форме несколько радиокнопок, позволяющих загружать в элемент ListBox1 списки из разных колонок листа Excel.
    Обеспечить возможность сортировки загруженных списков в ListBox1.
    Обеспечить возможность множественного выбора элементов из списка и вывод результата выбора в окно сообщений MsgBox.

    Привязка к списку диапазона значений через свойство RowSource

    Считаю, что для удобства реальной работы со списками на листах Excel (добавление новых значений в ячейки соответствующих колонок или удаление существующих) необходимо использовать функцию для автоматического определения номера последней заполненной строки в указанном столбце…
    Метод Find объектов класса Range (рекомендую заглянуть в его справку) очень помогает в этом вопросе….
    И так, функция может выглядеть, например, следующим образом….

    Function GetLastRowFromColumn(numColumn As Integer) As Integer
    GetLastRowFromColumn = Columns(numColumn).Cells.Find(«*», , , , xlByRows, xlPrevious).Row
    End Function

    Как видите, единственным параметром она получает номер колонки (правда, для простоты я оставил всего один лист в книге, а иначе бы лист тоже пришлось бы указать как параметр), а возвращает номер строки той ячейки, которую вернул метод Find…

    Тогда обработчики событий щелчков мышью по радиокнопкам будут выглядеть так…

    Private Sub OptionButton1_Click()
    lastrow = GetLastRowFromColumn(1)
    If OptionButton1 Then Me.ListBox1.RowSource = «=A1:A» & lastrow
    End Sub

    Private Sub OptionButton2_Click()
    lastrow = GetLastRowFromColumn(2)
    If OptionButton2 Then Me.ListBox1.RowSource = «=B1:B» & lastrow
    End Sub

    Private Sub OptionButton3_Click()
    lastrow = GetLastRowFromColumn(3)
    If OptionButton3 Then Me.ListBox1.RowSource = «=C1:C» & lastrow
    End Sub

    Можно было бы и еще упростить (до одной строки в процедуре),

    Me.ListBox1.RowSource = «=A1:A» & GetLastRowFromColumn(1)

    но считаю, что наличие переменной lastrow помогает просматривать ее значение при отладке, а это сэкономленное время…. которое дороже, чем уменьшение объема кода…

    В общем, первая радиокнопка помещает в список диапазон из колонки А (используя свойство RowSource), а вторая и третья, соответственно, из колонок В и С

    Множественный выбор

    Основное свойство элемента ListBox – это List… индексированный список значений… (As Variant) Поэтому к любому элементу списка можно обратиться по индексу… ,например List(idx)…
    И так же важно второе индексированное свойство Selected(idx), которое представляет собой массив логических величин, показывающий, выделен ли конкретный элемент списка пользователем или нет…

    Таким образом, обработчик кнопки «Сообщение» выглядит так…

    Private Sub CommandButton1_Click()
    Dim n As Integer, s As String
    s = «»

    For n = 0 To Me.ListBox1.ListCount — 1
    If Me.ListBox1.Selected(n) Then
    s = s & Me.ListBox1.List(n) & vbLf
    End If
    Next n

    If s = «» Then
    MsgBox «Нет выбранных пунктов», 0, «Выбранные пункты списка»
    Else
    MsgBox s, 0, «Выбранные пункты списка»
    End If

    Он формирует строку s , только из выделенных пунктов списка и выводит соответствующее сообщение… Встроенная константа vbLf означает переход на новую строку…

    Сортировка списка

    А вот для сортировки списка нам придется отказаться от свойства RowSource , т.к. изменение порядка элементов списка будет противоречить привязанному диапазону. VBA справедливо заругается…

    Вот процедура сортировки объекта ListBox (который передается в виде параметра As Object)

    Sub mySort(aL As Object)
    Dim locList() As Variant, siz As Long
    ‘Сортирует список ListBox (свойство .List — как массив Variant)
    Dim j As Long
    siz = UBound(aL.List)
    ReDim locList(UBound(aL.List))

    For j = 0 To siz
    locList(j) = .List(j)
    Next j

    .RowSource = «»
    .Clear
    mySortArray locList

    For j = 0 To siz
    .AddItem (locList(j))
    Next j

    End With
    End Sub

    Как видите, сначала создаем массив locList() нужной размерности и заполняем его элементами списка…
    Затем отвязываем список от диапазона (aL.RowSource = «») и очищаем его (aL.Clear)
    А полученный массив сортируем обычным образом (любым из алгоритмов сортировки).
    Все. Осталось загрузить отсортированный массив в список, используя метод AddItem, конечно же, в цикле…

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

    ListBox1.MultiSelect = fmMultiSelectMulti



    Все…

    Использование элемента управления – список (ListBox)

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

    Таблица 4.6 –Основные свойства элемента управления ListBox

    Наиболее часто используемые методы элемента управления ListBox приведены в таблице 4.7.

    Таблица 4.7 –Методы элемента управления ListBox

    Для заполнения списка можно воспользоваться одним из следующих способов:

    1) Поэлементно, если список состоит из одной колонки.

    2) Массивом, если список состоит из одной колонки.

    .List = Array(«Июнь», «Июль», «Август»)

    3) Из диапазона, в который предварительно введены элементы списка.Результат выбора (индекс выбранной строки) выводится в ячейку С1:

    4) Поэлементно, если список состоит из нескольких колонок, например двух.

    ListBox1.List(i, 0) = XX(i)

    ListBox1.List(i, 1) = Y(i)

    2. Пример создания приложения с обработкой выбранных в списке значений

    Пример 5.2. Создадим приложение, которое обрабатывает список значений и позволяет подсчитать сумму, произведение, минимальное или максимальное значения, среди выбранных в списке элементов. Проектируемая пользовательская форма, представлена на рисунке 4.7.

    Рисунок 4.7 – Пользовательская форма для работы со списком значений

    Опишем назначение и принцип взаимодействия элементов управления на представленной форме:

    — ListBox(список) – список значений из целых чисел, которые можно выделять. На основе выделенных значений и выбранных переключателей формируется ответ;

    — CommandButton1(кнопка)– кнопка с надписью “Заполнить”. Нажатие на эту кнопку запускает процедуру обработки события (Private Sub CommandButton1_Click()), которая должна заполнить список случайными целыми числами в интервале от 1 до 100;

    — CommandButton2(кнопка)– кнопка с надписью “Очистить”. Нажатие на эту кнопку запускает процедуру обработки события (Private Sub CommandButton2_Click()), которая должна очистить список, что можно реализовать, используя метод ListBox1.Clear;

    — CommandButton3(кнопка)– кнопка с надписью “Выполнить”. Нажатие на эту кнопку запускает процедуру обработки события (Private Sub CommandButton3_Click()), которая выполняет заполнение поле TextBox1 с пояснением “Ответ:” в зависимости выбранного переклю-чателя: OptionButton1, OptionButton2, OptionButton3, Option-Button4;

    Читать еще:  Как делать диаграммы в excel

    — CommandButton4(кнопка)– кнопка с надписью “Выход”. Нажатие на кнопку прячет форму;

    — TextBox1(поле) с пояснением “Ответ:”. В это поле будет выводиться результат. Поле должно быть недоступным для пользователя, т. е. пользователь не сможет ни ввести, ни скорректировать данные в нем;

    — Label1(надпись) – пояснительная надпись для поля вывода ответа;

    — Frame1 (рамка) Используется для группировки переключателей

    — OptionButton1(переключатель) с надписью “Количество выбранных элементов”;

    — OptionButton2(переключатель) с надписью “Среднее значение”;

    — OptionButton3(переключатель) с надписью “Минимальное значение”;

    — OptionButton4(переключатель) с надписью “Максимальное значение”;

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

    Процедура заполнения списка при нажатии на кнопку “Заполнить”:

    Private Sub CommandButton1_Click()

    For i = 0 To N — 1

    Класс ListBox — создание простого списка в VBA

    Элемент управления ListBox vba позволяет добавлять список с данными на форму. В отличии от комбинированного списка ComboBox, ListBox имеет следующие отличия:

    • Тут нельзя вводить собственные значения, а лишь любоваться теми, что были добавлены изначально
    • Есть возможность выбирать сразу несколько значений.

    Хорошо, прежде чем продолжить, вспоминаем – для запуска редактора VBA служит комбинация клавиш Alt + F11, все элементы управления находятся в окне ToolBox (меню Insert, пункт ToolBox). Вот некоторые свойства для объекта ListBox:

    ColumnCount – позволяет задать количество столбиков в списке

    ColumnHeads – позволяет задать режим отображения заголовков для колонок: true – заголовки отображаются, false – заголовки не отображаются. Данное свойство актуально при использовании компонента vba ListBox в Exel.

    ColumnWidths – свойство определяет ширину колонок, например, “20;30;15”. Как видим, значение строковое, тут мы задали ширину для трех столбиков, если мы зададим ноль, то столбик не будет отображаться.

    TextColumn – содержит целое значение, определяющее, содержимое которого столбца должно возвращать свойство Text.

    BoundColumn — содержит целое значение, определяющее, содержимое которого столбца должно возвращать свойство Value.

    Если для TextColumn и BoundColumn прописать 0, то будет возвращаться номер выбранного значения в списке объекта ListBox VBA языка.

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

    MultiSelect – позволяет определить, как происходит выбор элементов: 0 – fmMultuSelectSingle (только одиночный выбор), 1 — fmMultuSelectMulti (возможность выбирать несколько элементов щелчком мыши или посредством нажатия клавиши “Пробел”), 2 — fmMultuSelectExtended (возможность выбирать несколько элементов посредством нажатия клавиши “Shift”).

    VBA Excel ListBox

    Теперь надо попрактиковаться, напишем пример использования компонента VBA ListBox в Excel. Но прежде всего, надо заполнить четыре столбика различными данными. Я создал книгу в Excel и заполнил первые четыре столбика такими данными:

    1. A – первое поле Автомобиль (оно будет служить заголовком), далее следуют марки автомобилей.
    2. B – первое поле Телефон (оно будет служить заголовком), далее следуют модели телефона Samsung.
    3. C – первое поле Компьютер (оно будет служить заголовком), далее следуют марки производителей PC.
    4. D – первое поле Напиток (оно будет служить заголовком), далее следуют марки напитков.

    Хорошо, таблицу в Excel мы сделали, теперь можно приступить к работе с проектом. И так, добавьте в проект новый модуль и форму.

    Внешний вид формы вы можете увидеть на рисунке. На форме должны быть расположены два элемента управления vba excel ListBox, три элемента TextBox и одна кнопка (CommandButton). Первый список будет содержать четыре столбца, в которых будет отображаться содержимое первых пятидесяти ячеек для A, B, C и D. Второй список будет содержать также все 4 столбика, но отображаться будет только первый. При нажатии на кнопку, произойдет считывание выбранного элемента во втором списке, и в текстовых полях отобразится содержимое для второй, третьей и четвертой колонки.

    Чтобы не путать все еще больше, приступим к практике:

    UserForm_Initialize – настройка данных при инициализации формы (UserForm). Тут происходит настройка свойств для первого и второго объекта ListBox vba языка:

    ListBox1 – будет отображаться заголовок, компонент содержит четыре колонки, их ширина: 60;80;60;30. Данные в список будут добавляться из диапазона A2:D50, присутствует возможность выделять только один элемент в списке.

    ListBox2 – тут практически все тоже самое, что и для первого списка, только ширина колонок: 60;0;0;0 – то есть, будет отображаться содержимое только первой колонки.

    CommandButton1_Click – тут происходит обработка щелчка по кнопке, а именно: происходит проверка, выбрано ли что-то во втором списке (vba excel ListBox), если да, то в первое текстовое поле запишется содержимое из второй колонки, во второе – из третей и в третье – из четвертой.

    Спасибо за внимание. Автор блога Владимир Баталий

    Работа со списками в Visual Basic

    Приведённые практические работы по программированию могут быть использованы при изучении элементов выбора Visual Basic. Списки целесообразно изучать после знакомства с переключателями (OptionButton) и флажками (CheckBox).

    При объяснении нового материала удобно использовать распечатки с изложением теоретического материала и примерами программ, которые выдаются каждому студенту (ученику), либо методические пособия (мы используем авторское пособие “Практикум по решению задач в среде Visual Basic”, часть 1, 2).

    Приведённые практические работы рассчитаны на 3 занятия по 2 часа. Задания самостоятельной работы можно использовать в качестве домашних заданий.

    В Visual Basic существует 2 вида списков:

    • комбинированный список ComboBox;
    • список ListBox.

    1. Комбинированный список ComboBox

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

    Свойство Style задаёт внешний вид комбинированного списка (по умолчанию оно равно 0 — элемент ComboBox отображается в виде текстового поля со стрелкой справа, позволяющей развернуть весь список и выбрать требуемое значение). Если Style = 1, то постоянно отображается весь список (или список с полосой прокрутки).

    Основные свойства ComboBox

    0 — Dropdown Combo (раскрывающийся комбинированный список);

    1 — Simple Combo (простой комбинированный список);

    2 — Dropdown List (раскрывающийся список).

    Для добавления нового элемента в список используется метод AddItem.

    Пример: Combo1.AddItem “Пение” — добавить в список Combo1 слово Пение.

    Добавляемые в список элементы имеют тип String; [index] — порядковый номер в списке, под которым будет находиться новый элемент (необязательный параметр).

    Добавить элементы в комбинированный список можно также на этапе разработки с помощью свойства List. Для добавления очередного элемента в список нужно ввести этот элемент в свойстве List и нажать комбинацию клавиш Ctrl + Enter.

    2. Список ListBox

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

    В отличие от ComboBox список ListBox можно создать многоколончатым и осуществлять выбор нескольких элементов одновременно.

    Свойство MultiSelect позволяет задать режим множественного выбора элементов в списке. В режиме MultiSelect = 1 добавление элемента в выделенную группу или исключение из нее осуществляется с помощью щелчка мыши или нажатия пробела. Если MultiSelect = 2, то в этом случае выделение элементов выполняется по аналогии с программой Проводник:

    • щелчок мыши при нажатой клавише Shift позволяет выделить несколько подряд расположенных элементов;
    • щелчок мыши при нажатой клавише Ctrl даёт возможность выделять группу несмежных элементов списка.

    Основные свойства элемента ListBox

    0 — одноколончатый список с вертикальной прокруткой;

    1 — одноколончатый список с горизонтальной прокруткой;

    >1 — многоколончатый список с горизонтальной прокруткой

    0 — None (обычный список);

    1 -Simple (простой множественный выбор — щелчок мыши или нажатие Пробел выделяет очередной элемент или снимает выделение);

    2 — Extended (расширенный множественный выбор) — выделение с использованием вспомогательных клавиш.

    Методы ListBox аналогичны методам ComboBox.

    Практическая работа 1. Проект “Результаты сессии”

    Задание: создать проект, содержащий 3 списка: список студентов группы; список студентов, получивших зачёт и список неаттестованных. Двойным щелчком мыши в списке студентов (List1) выбирается фамилия и добавляется в список “Зачёт” (List2). Двойным щелчком в списке “Зачёт” фамилия возвращается назад. Кнопкой “Добавить в список” фамилия, введённая в текстовое поле Text1, заносится в список List1. Кнопка “н/а” заносит выбранную фамилию из списка студентов в список List3 ( н/а).

    Private Sub Form_Load() ‘загрузка формы

    List1.AddItem «Чесноков»: List1.AddItem «Симонов»

    List1.AddItem «Трушков»: List1.AddItem «Морозова»

    Private Sub List1_DblClick() ‘перенести из списка в зачёт

    List1.RemoveItem List1.ListIndex ‘удалить из списка

    Private Sub List2_DblClick() ‘перенести назад в Список из Зачёт

    Private Sub List3_DblClick() ‘перенести назад в список из н/а

    Private Sub Command1_Click() ‘добавить в список из текст. поля

    Private Sub Command3_Click() ‘добавить в н/а

    List1.RemoveItem List1.ListIndex ‘удалить из списка

    Задания

    1. Добавьте в проект список оценок (2, 3, 4, 5) – List4.
    2. Измените проект таким образом, чтобы можно было добавлять в результаты фамилию и оценку ученика.
    3. Создайте кнопку “Очистить результаты”.

    Примерный вид формы показан на рисунке.

    Практическая работа 2. Проект “Переводчик”

    Задание: создать проект для проверки знания иностранных слов (англо-русский и русско-английский переводчик).

    Элементы интерфейса проекта:

    1. Комбинированные списки Combo1 и Combo2 – для хранения русских и английских слов. Индексы русских слов в списке должны соответствовать индексам соответствующих им английских слов.
    2. Текстовое поле Text1 — для вывода случайного слова из списка, которое необходимо перевести.
    3. Текстовое поле Text2 — для вывода комментария “Верно” или “Неверно”.
    4. Текстовые поля Text3, Text4 — для вывода количества вопросов и верных ответов.
    5. Таймер Timer1 – для временной задержки при выводе очередного вопроса.
    6. Image1 – для вывода рисунка, соответствующего слову.
    7. Элемент MMControl1 — для воспроизведения звука.

    Элемент MMControl является дополнительным компонентом VB (Activ X). Для его установки необходимо:

    • Открыть в меню Проект – Компоненты вкладку Управление (Control);
    • Установить флажок MicrosoftMultimedia Control 6.0;
    • На панели элементов управления появится новый значок MMControl.

    Рисунки к проекту сохраните в папке с проектом в порядке следования слов в списке Combo1:

    Ris0.jpg – рисунок к первому слову списка;

    Ris1.jpg – рисунок ко второму слову списка и т.д.

    Для определения имени файла рисунка в проекте используем переменную Path:

    Path = «Ris» & Mid(Str(n), 2, 1) & «.jpg»

    Функция Mid используется для того, чтобы убрать пробел перед числом в имени файла, т.к. функция Str(n) для положительного числа формирует строку с пробелом перед числом. Таким образом, получаем неверное имя файла Ris 0.jpg, вместо Ris0.jpg.

    Рассмотрим основные процедуры проекта.

    1) В процедуре загрузки формы нужно заполнить списки русских и английских слов.

    Dim n, k, z, p As Integer, Path As String

    ‘n – индекс слова в списке; k – количество верных ответов; z – кол. вопросов; p – признак направления перевода; Path – путь к файлу с рисунком на диске

    Private Sub Form_Load()

    Combo1.AddItem «собака»: Combo1.AddItem «дельфин»

    Combo1.AddItem «осёл»: Combo1.AddItem «красный»

    Combo1.AddItem «зеленый»: Combo2.AddItem «Dog»

    Combo2.AddItem «Dolphin»: Combo2.AddItem «Donkey»

    Combo2.AddItem «Red»: Combo2.AddItem «Green»

    k = 0 ’количество верных ответов

    z = 0 ‘количество вопросов

    2) При выборе кнопки “Перевод рус/англ” должно появляться русское слово. Для данного слова нужно найти перевод в списке английских слов. Список русских слов при этом должен скрываться.

    Private Sub Command5_Click() ‘Перевод рус/англ

    p = 1 ‘признак перевода – рус/англ

    Combo1.Visible = False ‘скрыть список русских слов

    Combo2.Visible = True ‘показать список англ. слов

    Label1.Caption = «Русское слово»

    Timer1.Enabled = True ‘включить таймер

    3) В процедуре таймера случайным образом определяем индекс слова в списке слов. Если p=1, то было выбрано направление перевода рус/англ., поэтому слово выбирается из списка русских слов Combo1.

    Private Sub Timer1_Timer()

    z = z + 1 ‘подсчёт кол. вопросов

    n = Int(Rnd * 4) ‘случайный выбор индекса слова в списке слов

    If p = 1 Then Text1.Text = Combo1.List(n)

    4) Для выбора перевода заданного русского слова пользователь делает щелчок по списку английских слов. Если индекс исходного русского слова n совпадает с индексом слова-перевода, выбранного пользователем, то ответ верный.

    Private Sub Combo2_Click() ‘список англ. слов

    If n = Combo2.ListIndex Then ‘если ответ верный

    Image1.Visible = True ‘показать рисунок

    MMControl1.FileName = «da.wav» ‘загрузить звуковой файл

    Path = «Ris» & Mid(Str(n), 2, 1) & «.jpg»

    Image1.Picture = LoadPicture(Path) ‘загрузить файл с соответствующим рисунком

    Else ‘если ответ неверный

    MMControl1.Command = «sound» ‘воспроизвести звук. файл

    Задания:

    1. Создайте процедуру кнопки “Перевод англ/рус”.
    2. Добавьте кнопку Сброс.
    3. Подберите 2 звуковых файла для подтверждения верного и неверного ответа, подключите эти файлы к проекту.
    4. Создайте заставку к проекту.

    Самостоятельная работа

    1. Создать проект “Выбор шрифта”, позволяющий выбрать с помощью списков тип шрифта, размер, начертание (свойства): жирный, подчёркнутый, курсив. Выбранные параметры должны применяться к метке Образец.

    Свойства шрифта в метке задаются следующими командами:

    Label1.Font.Italic = True – установить курсив

    Label1.Font.Bold = False – отменить жирный шрифт

    Label1.Font.Underline = True – установить подчёркнутый шрифт

    Label1.Font = Combo1.Text – применить к метке тип шрифта, выбранный в комбинированном списке 1

    Label1.Font.Size = Combo1.Text — применить к метке размер шрифта, выбранный в комбинированном списке 1

  • Создать проект “Заказы CD/DVD дисков по каталогам”. На форме разместить 2 комбинированных списка: “Игры” и “Обучающие программы”; список “Заказано”. Кнопки “Добавить в заказ” добавляют выбранный элемент в список “Заказано”. Кнопка “Удалить из заказа” удаляет выбранный элемент из заказа. Предусмотреть подсчёт количества заказов в списке.
  • Создать проект “Результаты кросса” с использованием 3-х списков. Двойным щелчком мыши в списке студентов (List1) выбирается фамилия и добавляется в список “Зачёт” (List2). Двойным щелчком в списке “Зачёт” фамилия возвращается назад. Кнопкой “Добавить в список” фамилия, введённая в текстовое поле Text1, заносится в список List1. Кнопка “н/а” заносит выбранную фамилию из списка в список List3 (н/а).
  • Литература

    1. Глушаков С.В. , Мельников В.В., Сурядный А.С. Программирование в среде Windows. Visual Basic 6.0. М.: ООО “Издательство АСТ”, 2001
    2. Браун С. Visual Basic. Учебный курс. – Спб.: Питер, 2002

    VBA Excel. Элемент управления ListBox (список)

    Элемент управления пользовательской формы ListBox для выбора и ввода информации в VBA Excel. Свойства списка, его заполнение, извлечение данных, примеры кода.

    Элемент управления ListBox

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

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

    Элемент управления ListBox позволяет выбрать несколько позиций из списка, но эта возможность не имеет практического смысла. Ввести информацию в ListBox с помощью клавиатуры или вставить из буфера обмена невозможно.

    Свойства списка

    * При Enabled в значении False возможен только вывод информации в список для просмотра.
    ** Для элемента управления ListBox действие свойства Locked в значении True аналогично действию свойства Enabled в значении False.
    *** Если включен многострочный выбор, свойства Text и Value всегда возвращают значения по умолчанию (пустая строка и Null).

    В таблице перечислены только основные, часто используемые свойства списка. Еще больше доступных свойств отображено в окне Properties элемента управления ListBox, а все методы, события и свойства – в окне Object Browser.

    Вызывается Object Browser нажатием клавиши «F2». Слева выберите объект ListBox, а справа смотрите его методы, события и свойства.

    Свойства BackColor, BorderColor, BorderStyle отвечают за внешнее оформление списка и его границ. Попробуйте выбирать доступные значения этих свойств в окне Properties, наблюдая за изменениями внешнего вида элемента управления ListBox на проекте пользовательской формы.

    Способы заполнения ListBox

    Используйте метод AddItem для загрузки элементов в список по одному:

    Используйте свойство List, чтобы скопировать одномерный массив значений в элемент управления ListBox.

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

    Используйте свойство RowSource, чтобы загрузить в список значения из диапазона ячеек рабочего листа:

    При загрузке данных из диапазона, содержащего более одного столбца, требуется предварительно указать количество столбцов в списке:

    В качестве имени листа используется имя ярлыка. Если имя листа содержит пробелы, оно заключается в одинарные кавычки.

    Подробнее о заполнении элемента управления ListBox вы можете ознакомиться в отдельной статье с наглядными примерами.

    Привязка списка к ячейке

    Для привязки списка к ячейке на рабочем листе используется свойство ControlSource. Суть привязки заключается в том, что при выборе строки в элементе управления, значение свойства Value копируется в привязанную ячейку.

    Если привязанная к списку ячейка содержит значение одной из строк элемента управления ListBox, то при запуске пользовательской формы список откроется с выделенной строкой, содержащей это значение. Если привязанная ячейка при загрузке формы пустая, то список откроется без выделения какой-либо строки.

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

    Привязать ячейку к списку можно, указав адрес ячейки в поле свойства ControlSource в окне Properties элемента управления ListBox. Или присвоить адрес ячейки свойству ControlSource в коде VBA Excel:

    Теперь значение выбранной строки в списке автоматически копируется в ячейку «A2» на листе «Лист1»:

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

    Извлечение информации из списка

    Первоначально элемент управления ListBox открывается со строками, ни одна из которых не выбрана. При выборе (выделении) строки, ее значение записывается в свойства Value и Text.

    Из этих свойств мы с помощью кода VBA Excel извлекаем информацию, выбранную в списке пользователем:

    Вторую строку кода можно записать myVar = UserForm1.ListBox1 , так как Value является свойством списка по умолчанию.

    Если ни одна позиция в списке не выбрана, свойство Value возвращает значение Null, а свойство Text – пустую строку. Если выбрана строка в многостолбцовом списке, в свойства Value и Text будет записана информация из первого столбца.

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

    Для получения данных из любого столбца элемента управления ListBox используется свойство List, а для определения выбранной пользователем строки – ListIndex.

    Для тестирования приведенного ниже кода скопируйте таблицу и вставьте ее в диапазон «A1:D4» на листе с ярлыком «Лист1»:

    Создайте в редакторе VBA Excel пользовательскую форму и добавьте на нее список с именем ListBox1. Откройте модуль формы и вставьте в него следующие процедуры:

    В процедуре UserForm_Initialize() присваиваем значения некоторым свойствам элемента управления ListBox1 перед открытием пользовательской формы. Процедура UserForm_Click() при однократном клике по форме выводит в MsgBox значение из третьего столбца выделенной пользователем строки.

    Теперь при выборе строки в списке, значение свойства Value будет записываться в ячейку «F1», а при клике по форме функция MsgBox выведет значение третьего столбца выделенной строки.

    Обратите внимание, что при первом запуске формы, когда ячейка «F1» пуста и ни одна строка в ListBox не выбрана, клик по форме приведет к ошибке. Это произойдет из-за того, что свойство ListIndex возвратит значение -1, а это недопустимый номер строки для свойства List.

    Если для списка разрешен многострочный выбор (MultiSelect = fmMultiSelectMulti или MultiSelect = fmMultiSelectExtended), тогда, независимо от количества выбранных строк, свойство Value будет возвращать значение Null, а свойство Text – пустую строку. Свойство ListIndex будет возвращать номер строки, которую кликнули последней, независимо от того, что это было – выбор или отмена выбора.

    Иногда перед загрузкой в ListBox требуется отобрать уникальные элементы из имеющегося списка. Смотрите, как это сделать с помощью объектов Collection и Dictionary.

    Ссылка на основную публикацию
    ВсеИнструменты
    Adblock
    detector
    ×
    ×