Класс 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.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

combobox word vba

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

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.

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

  1. Наташа

    Спасибо, Владимир, статья очень помогла!!!!

    Ответить
  2. Саша

    спасибо! описание примера очень понятное ! применил некоторые моменты в своем макросе

    Ответить
  3. Владимир

    Добрый день. Что делать если надо использовать 8 комбоксов и общее кол-во записей около 400. Эксел в какой то момент выдает сообщение:’Out of memory’. Как с этим бороться. Эксел 2010г. Спасибо.

    Ответить