Класс ListBox - MS Excel + VBA

advertisement
Класс 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 столбика, но отображаться будет только первый. При
нажатии на кнопку, произойдет считывание выбранного элемента во втором списке, и в текстовых полях
отобразится содержимое для второй, третьей и четвертой колонки.
Чтобы не путать все еще больше, приступим к практике:
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), если да, то в первое текстовое поле запишется
содержимое из второй колонки, во второе – из третей и в третье – из четвертой.
Download