Элемент управления ComboBox VBA языка позволяет формировать комбинированный список. Он предоставляет возможность, как выбирать готовые значения, так и вводить собственные данные. Вообще, стоит сказать, что робота со списками требует отдельной темы по определению, так как наиболее ярким примером создания сложных и комбинированных списков является — формирование базы данных.
Однако и тут есть один момент – большая часть возможностей языка VBA отходит на задний план. Даже продукт Microsoft Access (работа с базами данных), который в былые времена я скрупулезно изучал на уроках информатики, мне на практике ни разу не пригодился.
Поэтому, и в этой статье я не буду вникать во все премудрости компонента ComboBox.
Базовые свойства элемента управления ComboBox VBA языка:
- ColumnCount – позволяет задать количество столбиков в списке
- ColumnWidth – ширина столбиков
- ColumnHeads – определяет, отображать (значение true) или не отображать (значение false) заголовки столбиков.
- RowSource – позволяет задать диапазон для элементов списка
- Value и Text – собственно, текущее значение, что хранится в списке.
Как и для компонента TextBox, для ComboBox главным событием является Change. Событие Change возникает при вводе данных в список.
Ладно, пора приступать к практике. Сначала мы напишем пример использования объекта языка VBA ComboBox в Excel, а потом в Word.
VBA ComboBox Excel
И так, добавьте в окно Проекта новый модуль и новую форму. Модуль назовите ComboBox, а форму – CB_Form, за имена отвечает свойство Name. В редакторе кода для модуля пропишите следующую процедуру:
Sub ComboBox() CB_Form.Show End Sub |
Процедура сделает форму видимой.
Теперь нужно приступить к созданию и настройке формы. Как она выглядит, вы можете просмотреть на картинке, но… для “слепого” браузера я ее опишу.
Параметры формы (UserForm): название (Caption) — работа с ComboBox в VBA, ширина – 340, высота – 190.
Параметры надписи (Label): Имя (Name) L_CB, свойство Caption оставляете пустым, ширина 324, высота 30, отступ слева и сверху равен 6.
Далее нам следует добавить четыре элемента управления vba ComboBox excel, разместите их так: по два в одну строку, имена для каждого компонента задайте такие: CB_A, CB_B, CB_C и CB_D. Я выбрал такие имена потому, что в каждом списке будет отображаться содержимое текущего листа Excel для колонок A, B, C и D.
Это важно!!! Позаботьтесь, что бы содержимое колонок A-B не было пустым и что бы количество в них элементов не было слишком огромным, достаточно 100 записей максимум. В противном случае у вас возникнут ошибки.
Для наглядности над каждым объектом ComBox vba можете поставить надписи вида: Ячейка А, Ячейка В и так далее.
В самом низу, разместите, кнопку с именем CommandButton1 и напишите на ней “Объединить”.
Ладно, теперь в редакторе кода для форму пропишите следующие процедуры:
Private Sub CommandButton1_Click() L_CB.Caption = CB_A.Value & " " & _ CB_B.Value & " " & _ CB_C.Value & " " & _ CB_D.Value End Sub Private Sub UserForm_Initialize() Dim oColumn As Range Dim oCell As Range 'Заполняем первый список Set oColumn = Columns("A") For Each oCell In oColumn.Cells If oCell.Value <> "" Then CB_A.AddItem oCell.Value End If Next CB_A.ListIndex = 0 'Заполняем второй список Set oColumn = Columns("B") For Each oCell In oColumn.Cells If oCell.Value <> "" Then CB_B.AddItem oCell.Value End If Next CB_B.ListIndex = 0 'Заполняем третий список Set oColumn = Columns("C") For Each oCell In oColumn.Cells If oCell.Value <> "" Then CB_C.AddItem oCell.Value End If Next CB_C.ListIndex = 0 'Заполняем четвертый список Set oColumn = Columns("D") For Each oCell In oColumn.Cells If oCell.Value <> "" Then CB_D.AddItem oCell.Value End If Next CB_D.ListIndex = 0 End Sub |
Процедура CommandButton1_Click – тут происходит обработка клика по кнопке. После клика, произойдет считывание выбранных данных для каждого объекта ComboBox vba excel, далее, все четыре значения объединяются и записываются в содержимое свойства Caption объекта Надпись.
Процедура UserForm_Initialize – тут происходит заполнение списков содержимым колонок сразу после инициализации формы. Происходит выбор заданной колонки листа Excel, потом циклично идет перебор всех ее значений и их добавление (метод AddItem) в выбранный список.
VBA ComboBox Word
Тут мы создадим список, состоящий из трех колонок, как он выглядит, можно посмотреть на рисунке. Не буду вникать во все премудрости, а сразу покажу код:
Private Sub UserForm_Initialize() With ComboBox1 .ColumnCount = 3 .ColumnWidths = "50;50;50" .ColumnHeads = False .RowSource = "" End With ComboBox1.AddItem "Украина" ComboBox1.List(0, 1) = "Киев" ComboBox1.List(0, 2) = "Украинский" ComboBox1.AddItem "Россия" ComboBox1.Column(1, 1) = "Москва" ComboBox1.Column(2, 1) = "руский" ComboBox1.AddItem "Белоруссия" ComboBox1.List(2, 1) = "Минск" ComboBox1.List(2, 2) = "русский" ComboBox1.ListIndex = 0 End Sub |
Как видим, при инициализации мы сначала заполняем свойства объекта ComboBox1 в блоке with … wend: три колонки, равной длины, заголовки отсутствуют. Далее происходит ручное заполнение списка. Как видим, элемент первой колонки добавляется с помощью метода AddItem, остальные колонки заполняются как массивы с помощью метода List.
Спасибо, Владимир, статья очень помогла!!!!
спасибо! описание примера очень понятное ! применил некоторые моменты в своем макросе
Добрый день. Что делать если надо использовать 8 комбоксов и общее кол-во записей около 400. Эксел в какой то момент выдает сообщение:’Out of memory’. Как с этим бороться. Эксел 2010г. Спасибо.