В этой статье мы рассмотрим такой элемент управления как OptionButton – Переключатель. Полагаю, многим приходилось видеть форму, на которой находятся несколько надписей и возле каждой надписи маленькая точка. Пользователь может выбрать только один элемент из списка. Компонент OptionButton в vba также называется RadioButton – по аналогии с радио, где можно выбрать одновременно только одну радиостанцию.
Если вы расположите на форме несколько переключателей vba OptionButton, то они будут между собой связаны, то есть вы сможете нажать одновременно только на один. Что бы создать отдельную группу объектов OptionButton, их нужно поместить в отдельную рамку или на отдельную вкладку.
Основные свойства для переключателя следующие:
Name – имя объекта, оно назначается автоматически в стиле: OptionButton1, OptionButton2, … , OptionButtonN. Но вы можете переименовать объект так, как вам подходит.
Caption – надпись, которая будет отображаться рядом с переключателем, при добавлении на форму компонента OptionButton в vba, свойство caption автоматически принимает такое же значение как и свойство Name.
Enabled – позволяет сделать активным и доступным (значение true) объект, или наоборот, сделать объект неактивным и недоступным (значение false).
Value – содержит логическое значение: true – элемент управления включен (вы нажали на переключатель) или false – элемент управления выключен.
Visible – определяет видимость объект, принимает логическое true – отображать или false – не отображать компонент.
Как и для большинства управляющих компонентов, для OptionButton главным событием vba является Change – событие возникает при включении/выключении радио-кнопки.
Хорошо, теперь давайте приступим к практике. Добавим в проект новую форму (я ее назвал OBForm) и новый модуль (OBModule), за добавление отвечает меню Insert, пункты UserForm и Module.
В окне свойств для формы (UserForm) установите следующие значения:
- Caption – работа с компонентом OptionButton
- Width – 320
- Height – 134
Далее надо добавить на поверхность формы четыре переключателя, пусть они будут в одном столбике, справа от них добавьте один под другим два текстовых поля TextBox (соответственно TestBox1 и TextBox2), а под ними одну простую кнопку (CommandButton). Как все должно выглядеть можете посмотреть на рисунке.

Как и прежде, в редакторе кода для модуля следует прописать следующую процедуру:
Sub OBModule() OBForm.Show End Sub |
Тут мы просто указываем, что при запуске макроса должна отобразиться форма, Show — показать.
Хорошо, теперь немного о логике работы: возле каждого переключателя прописано имя элемента, при выборе заданного объекта OptionButton в vba (или RadioButton), в первом текстовом поле (TextBox1) должно отобразиться описание для выбранного элемента управления. При нажатии на кнопку во втором текстовом поле (TextBox2) должно отобразиться значение свойства Caption выбранного объекта OptionButton.
Хорошо, теперь пропишем в окне редактора кода для формы следующие процедуры:
Private Sub CommandButton1_Click() Dim ctrl As Control For Each ctrl In OBForm.Controls If ctrl.Value = True Then TextBox2.Text = ctrl.Caption End If Next End Sub Private Sub OptionButton1_Change() TextBox1.Text = "" TextBox1.Text = "CommandButton - работа с кнопками" End Sub Private Sub OptionButton2_Change() TextBox1.Text = "" TextBox1.Text = "CheckBox - создание флажков" End Sub Private Sub OptionButton3_Change() TextBox1.Text = "" TextBox1.Text = "ListBox - формирование списка с данными" End Sub Private Sub OptionButton4_Change() TextBox1.Text = "" TextBox1.Text = "TextBox - добавление на форму текстового поля" End Sub |
Теперь проанализируем код:
CommandButton1_Click – тут происходит обработка клика по кнопке. В цикле for … each происходит перебор коллекции всех объектов OptionButton и происходит проверка значения свойства Value, если оно ровно true – значит, элемент выбран. Во второе текстовое поле будет записываться значение свойства Caption для выбранного объекта.
Процедуры от OptionButton1_Change до OptionButton4_Change обрабатывают событие Change. Как только мы выберем переключатель OptionButton в VBA, в первое текстовое поле запишется текстовая строка. Строка TextBox1.Text = «» фактически является лишней, так как содержимое текстового поля автоматически затирается при присвоении свойству Text нового текста.