В этой статье мы познакомимся с классом CommandButton VBA языка, который отвечает за создание и настройку кнопки. В предыдущей статье я описал компонент Label, тут, в примерах, я его тоже буду использовать, просто хочу пойти по принципу – постепенно усложняем код и увеличиваем код.
Скажу честно, мне намного интересней описывать синтаксис самого языка, чем работу визуальными элементами. Компонент vba — CommandButton обладает следующими основными свойствами:
Cancel – данное свойство актуально, если пользователю нужно подтвердить или отменить выбор. Так если мы создадим кнопку с именем Отмена, и при нажатии на нее должно произойти закрытие формы, то если задано значении true для данного свойства — кнопка будет нажиматься автоматически при нажатии на клавишу Esc.
Caption – собственно, надпись на кнопке
Name – имя объекта CommandButton vba языка, как правило имя аналогично названию класса (CommandButton1, CommandButton2, … , CommandButtonN). Лучше устанавливать что то более понятное, например, bOk, bEsc, bSumm и так далее.
Default — при значении в true, произойдет автоматическое нажатие кнопки при нажатии на клавиатуре клавиши Enter.
Picture – позволяет указать путь к пиктограмме, которая будет отображаться вместо надписи на CommandButton.
Enable – определяет активность (true) или неактивность (false) объекта для класса CommandButton vba языка.
Visible – как и для остальных объектов, свойство позволяет скрыть (false) или показать (true) элемент управления.
Accelerator – позволяет задать комбинацию клавиш для данного элемента управления. Вы просто прописываете имя клавиши, комбинация осуществляется вместе с клавишей Alt.
И так, теперь приступим к практике.
Добавляем компонент:
Откройте редактор VBA (Alt +F11) и добавьте в проект новый модуль (Insert/Module) и форму (Insert/UserForm). Великолепно, в окне проектов откройте добавленный объект класса UserForm, в окне Свойств установите следующие значения:
- Caption – “Работа с кнопками”
- Height – 147.75
- Width – 300.75
Хорошо, теперь в окне ToolBox (View/ToolBox) выберите элемент управления Label и добавьте его на форму, установите следующие значения:
- Caption – оставляем пустым!!!
- Height – 24
- Width – 282
- Left – 6
- Top — 6
Теперь нам нужно добавить на форму пять кнопок, первые три кнопки должны располагаться сразу под надписью друг за другом, определите для них следующие значения:
- Name – Button1, Button2 и Button3
- Caption – Кнопка 1, Кнопка 2 и Кнопка 3
- Height – для всех 24
- Width – для всех 72
- Top – для всех 48
- Left – 18, 108 и 198
Теперь в самый низ добавьте еще две кнопки, со следующими значениями:
- Name – ButtonExit и ButtonNoActive
- Caption – Выход и Неактивная
- Height – для всех 24
- Width – для всех 120
- Top – для всех 90
- Left – 18и 156
Для кнопки под именем ButtonNoActive установите свойство Enable в false.

Хорошо, мы подготовили форму и все нужные нам элементы управления, теперь давайте определимся с целью:
При нажатии на первые три кнопки класса vba CommandButton, в поле Label должны отображается надписи вида “нажата такая-то …”, плюс, цвет текста должен тоже измениться. Одна из нижних кнопочек должна отвечать за выход, а другая будет всегда неактивной.
Теперь давайте приступим к программированию, в редакторе кода для модуля как всегда пишем:
Sub Module2() UserForm2.Show End Sub |
Тут мы просто говорим, что при запуске макроса должна отобразиться форма.
В редакторе кода для самой формы (что бы его открыть, можете просто дважды щелкнуть по форме) пропишите следующие процедуры:
PrivateSub ButtonExit_Click() Unload Me End Sub |
Тут происходит обработка события Click для ButtonExit, Unload Me – отвечает за удаление из памяти (закрытие) текущего объекта (UserForm), проще говоря, “Выход”.
Private Sub UserForm_Activate() Label1.Caption = "Нажмите на любую кнопку" Label1.FontSize = 20 Label1.ForeColor = &H0 Label1.TextAlign = fmTextAlignCenter End Sub |
Обработка события Activate для класса UserForm – как только запустится макрос, в поле Надпись появится заданный текст, размером в 20, черного цвета, он будет расположен по центру.
Private Sub Button1_Click() Label1.Caption = "Нажата Кнопка 1" Label1.ForeColor = &H66FF End Sub Private Sub Button2_Click() Label1.Caption = "Нажата Кнопка 2" Label1.ForeColor = &HFF6600 End Sub Private Sub Button3_Click() Label1.Caption = "Нажата Кнопка 3" Label1.ForeColor = &H33CC00 End Sub |

Последние три процедуры отвечают за обработку одинарного клика по трем кнопкам, что находятся сразу под надписью. Будет меняться текст Надписи и его цвет. И так, в этой статье мы рассмотрели класс CommandButton языка VBA.
А можете помочь с не простым для меня заданием?
Или покажите пример.
Нужно сделать три текстовых поля для ввода числовых значений. Напротив каждого поля должна быть кнопка «записать данные». И при нажатии каждой кнопки со своего поля данные записывались в определённую ячейку определённого лист книги Exel?