MyTetra Share
Делитесь знаниями!
ListBox
27.12.2017
23:38
Текстовые метки: Excel, ListBox, VBA, листбокс
Раздел: VBA - Форма

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


Этот элемент управления очень похож на комбинированный список (Combobox), но применяется гораздо реже по двум причинам:

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

рис . 1.1 Элемент управления Listbox на панели ToolBox

рис. 1.2 Элемент управления Listbox на форме

рис. 1.3 Пример элемента управления Listbox на форме

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

Обычно ListBox используется:

  • как промежуточное средство отображения введенных/выбранных пользователем через ComboBox значений (или любых других списков, например, списков выбранных файлов);
  • как средство редактирования списка значений, сформированных вышеуказанным образом или полученных из базы данных (для этого можно рядом с ListBox разместить кнопки Удалить или Изменить).

Основные свойства, методы и события у ListBox — те же, что и у ComboBox. Главное отличие — то, что имеется свойство MultiSelect, которое позволяет пользователю выбирать несколько значений. По умолчанию это свойство отключено.

Вот некоторые свойства для объекта 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 ListBox в Excel.

Но прежде всего, надо заполнить четыре столбика различными данными. В книге в Excel заполнены первые четыре столбика такими данными:

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

 

Внешний вид формы вы можете увидеть на рисунке.

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

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

Private Sub UserForm_Initialize()

With ListBox1

.ColumnHeads = True

.ColumnCount = 4

.ColumnWidths = “60;80;60;30″

.RowSource = “=A2:D50″

.MultiSelect = fmMultiSelectSingle

.TextColumn = 1

.BoundColumn = 0

End With

With ListBox2

.ColumnHeads = False

.ColumnCount = 4

.ColumnWidths = “60;0;0;0″

.RowSource = “=A2:D50″

.MultiSelect = fmMultiSelectSingle

.TextColumn = 0

.BoundColumn = 0

End With

End Sub

Private Sub CommandButton1_Click()

If ListBox2.Value <> “” Then

TextBox1.Value = ListBox2.Column(1)

TextBox2.Value = ListBox2.Column(2)

TextBox3.Value = ListBox2.Column(3)

End If

End Sub

 

 

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

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

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

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

Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования