Класс ComboBox — комбинированный список в VBA

Класс ComboBox — комбинированный список в VBA Макросы на VBA

Элемент управления 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

vba combobox excel

И так, добавьте в окно Проекта новый модуль и новую форму. Модуль назовите ComboBox, а форму – CB_Form, за имена отвечает свойство Name. В редакторе кода для модуля пропишите следующую процедуру:

Sub ComboBox()    CB_Form.ShowEndSub

Процедура сделает форму видимой.

Теперь нужно приступить к созданию и настройке формы. Как она выглядит, вы можете просмотреть на картинке, но… для “слепого” браузера я ее опишу.

Параметры формы (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 и напишите на ней “Объединить”.

Ладно, теперь в редакторе кода для форму пропишите следующие процедуры:

PrivateSub CommandButton1_Click()L_CB.Caption = CB_A.Value & " " & _CB_B.Value & " " & _CB_C.Value & " " & _CB_D.ValueEndSub PrivateSub UserForm_Initialize()Dim oColumn As RangeDim oCell As Range 'Заполняем первый списокSet oColumn = Columns("A")ForEach oCell In oColumn.CellsIf oCell.Value <>""ThenCB_A.AddItem oCell.ValueEndIfNextCB_A.ListIndex = 0 'Заполняем второй списокSet oColumn = Columns("B")ForEach oCell In oColumn.CellsIf oCell.Value <>""ThenCB_B.AddItem oCell.ValueEndIfNextCB_B.ListIndex = 0 'Заполняем третий списокSet oColumn = Columns("C")ForEach oCell In oColumn.CellsIf oCell.Value <>""ThenCB_C.AddItem oCell.ValueEndIfNextCB_C.ListIndex = 0 'Заполняем четвертый списокSet oColumn = Columns("D")ForEach oCell In oColumn.CellsIf oCell.Value <>""ThenCB_D.AddItem oCell.ValueEndIfNextCB_D.ListIndex = 0 EndSub

Процедура CommandButton1_Click – тут происходит обработка клика по кнопке. После клика, произойдет считывание выбранных данных для каждого объекта ComboBox vba excel, далее, все четыре значения объединяются и записываются в содержимое свойства Caption объекта Надпись.

Процедура UserForm_Initialize – тут происходит заполнение списков содержимым колонок сразу после инициализации формы. Происходит выбор заданной колонки листа Excel, потом циклично идет перебор всех ее значений и их добавление (метод AddItem) в выбранный список.

VBA ComboBox Word

combobox word vba

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

PrivateSub UserForm_Initialize() With ComboBox1.ColumnCount = 3.ColumnWidths = "50;50;50".ColumnHeads = False.RowSource = ""EndWith 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 EndSub

Как видим, при инициализации мы сначала заполняем свойства объекта ComboBox1 в блоке with … wend: три колонки, равной длины, заголовки отсутствуют. Далее происходит ручное заполнение списка. Как видим, элемент первой колонки добавляется с помощью метода AddItem, остальные колонки заполняются как массивы с помощью метода List.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий