Элемент управления пользовательской формы CommandButton, используемый в VBA Excel для запуска процедур и макросов. Свойства кнопки, примеры кода с ней.
UserForm.CommandButton – это элемент управления пользовательской формы, предназначенный исключительно для запуска процедур и макросов VBA Excel.
Для запуска процедур и макросов обычно используется событие кнопки – Click.
Свойства элемента CommandButton
Свойство | Описание |
---|---|
AutoSize | Автоподбор размера кнопки. True – размер автоматически подстраивается под длину введенной надписи (заголовка). False – размер элемента управления определяется свойствами Width и Height. |
BackColor | Цвет элемента управления CommandButton. |
Caption | Надпись (заголовок) – текст, отображаемый на кнопке. |
ControlTipText | Текст всплывающей подсказки при наведении курсора на кнопку. |
Enabled | Возможность взаимодействия пользователя с элементом управления CommandButton. True – взаимодействие включено, False – отключено (цвет надписи становится серым). |
Font | Шрифт, начертание и размер текста надписи. |
Height | Высота элемента управления. |
Left | Расстояние от левого края внутренней границы пользовательской формы до левого края элемента управления. |
Picture | Добавление изображения вместо текста заголовка или дополнительно к нему. |
PicturePosition | Выравнивание изображения и текста на кнопке. |
TabIndex | Определяет позицию элемента управления в очереди на получение фокуса при табуляции, вызываемой нажатием клавиш «Tab», «Enter». Отсчет начинается с 0. |
Top | Расстояние от верхнего края внутренней границы пользовательской формы до верхнего края элемента управления. |
Visible | Видимость элемента управления CommandButton. True – элемент отображается на пользовательской форме, False – скрыт. |
Width | Ширина элемента управления. |
WordWrap | Перенос текста заголовка на новую строку при достижении ее границы. True – перенос включен, False – перенос выключен. |
В таблице перечислены только основные, часто используемые свойства кнопки. Все доступные свойства отображены в окне Properties элемента управления CommandButton.
Пример кнопки с надписью и изображением
Примеры кода VBA Excel с кнопкой
Изначально для реализации примеров на пользовательскую форму UserForm1 добавлена кнопка CommandButton1.
Пример 1
Изменение цвета и надписи кнопки при наведении на нее курсора.
Условие примера 1
- Действия при загрузке формы: замена заголовка формы по умолчанию на «Пример 1», замена надписи кнопки по умолчанию на «Кнопка», запись цвета кнопки по умолчанию в переменную уровня модуля.
- Сделать, чтобы при наведении курсора на кнопку, она изменяла цвет на зеленый, а надпись «Кнопка» менялась на надпись «Нажми!»
- Добавление кода VBA Excel, который будет при удалении курсора с кнопки возвращать ей первоначальные настройки: цвет по умолчанию и надпись «Кнопка».
Решение примера 1
1. Объявляем в разделе Declarations модуля пользовательской формы (в самом начале модуля, до процедур) переменную myColor:
2. Загружаем пользовательскую форму с заданными параметрами:
Private Sub UserForm_Initialize() Me.Caption = «Пример 1» With CommandButton1 myColor = .BackColor .Caption = «Кнопка» End With End Sub |
3. Меняем цвет и надпись кнопки при наведении на нее курсора мыши:
Private Sub CommandButton1_MouseMove(ByVal _ Button As Integer, ByVal Shift As Integer, _ ByVal X As Single, ByVal Y As Single) With CommandButton1 .BackColor = vbGreen .Caption = «Нажми!» End With End Sub |
4. Возвращаем цвет и надпись кнопки при удалении с нее курсора мыши:
Private Sub UserForm_MouseMove(ByVal _ Button As Integer, ByVal Shift As Integer, _ ByVal X As Single, ByVal Y As Single) With CommandButton1 .BackColor = myColor .Caption = «Кнопка» End With End Sub |
Все процедуры размещаются в модуле пользовательской формы. Переменная myColor объявляется на уровне модуля, так как она используется в двух процедурах.
Пример 2
Запуск кода, размещенного внутри процедуры обработки события Click элемента управления CommandButton:
Private Sub CommandButton1_Click() MsgBox «Код внутри обработки события Click» End Sub |
Пример 3
Запуск внешней процедуры из процедуры обработки события Click элемента управления CommandButton.
Внешняя процедура, размещенная в стандартном модуле проекта VBA Excel:
Sub Test() MsgBox «Запуск внешней процедуры» End Sub |
Вызов внешней процедуры из кода обработки события Click
- с ключевым словом Call:
Private Sub CommandButton1_Click() Call Test End Sub |
- без ключевого слова Call:
Private Sub CommandButton1_Click() Test End Sub |
Строки вызова внешней процедуры с ключевым словом Call и без него – равнозначны. На ключевое слово Call можно ориентироваться как на подсказку, которая указывает на то, что эта строка вызывает внешнюю процедуру.
IvanSh Пользователь Сообщений: 57 |
Еще раз здрасте! 1. Как вообще определить названия этих кнопок, тк в свойствах их нигде нет? Может кто-то вспомнит по ActiveX, но это крайний случай, если не получится с обычными кнопками )) Изменено: IvanSh — 17.02.2014 22:35:37 |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
#2 17.02.2014 22:28:52 В общем случае так:
|
||
IvanSh Пользователь Сообщений: 57 |
Как узнать ИмяВашейКнопки? Это то что на ней в данный момент написано? Если так то вот что выдает: Изменено: IvanSh — 17.02.2014 22:38:42 |
Hugo Пользователь Сообщений: 23251 |
Дайте пример файла с парой кнопок — всем будет проще. |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
#5 17.02.2014 22:53:40
Нет — это разные вещи. См. файл. Прикрепленные файлы
|
||
IvanSh Пользователь Сообщений: 57 |
Юрий, не работает как нужно. Я просто макрос вызываю не той кнопкой, которую переименовываю )) А вот на которую жму она переименовывается. |
IvanSh Пользователь Сообщений: 57 |
#7 17.02.2014 23:11:42
Вот пример, там и задание )) Прикрепленные файлы
|
||
Sanja Пользователь Сообщений: 14838 |
#8 17.02.2014 23:30:10 тупо:
Изменено: Sanja — 17.02.2014 23:34:38 Согласие есть продукт при полном непротивлении сторон. |
||
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
Если одна кнопка должна поменять язык на всех остальных, то так (см. файл) |
Как узнать ИмяВашейКнопки? Изменено: Александр Моторин — 18.02.2014 00:19:54 |
|
anvg Пользователь Сообщений: 11878 Excel 2016, 365 |
#11 18.02.2014 05:05:30
Посмотреть свойства Button можно в Object Browser, если включить в его вспомогательном меню Show Hidden Members. И как вариант, в дополнение к решению Юрия М, не обходя все Shape на листе.
Успехов. |
||||
IvanSh Пользователь Сообщений: 57 |
Ребята, спасибо! Это то что нужно ))) щас буду пробовать, но только буду обзывать кнопки не все одинаково, а текст кнопки будет соответствовать значению массива (списка) в соответсвии с цифрой в конце названия кнопки: Button1.Characters.Text = mass[1], Button2.Characters.Text = mass[2] … и тд Хотя судя по всему придется использовать двумерный массив mass[i,j], где i — перевод слова, j -язык Изменено: IvanSh — 18.02.2014 08:26:57 |
IvanSh Пользователь Сообщений: 57 |
#13 18.02.2014 12:38:44 Короче потестил предложенный код: Юрий М спс у Вас все работает, мне нужна была именно строчка:
Алекс Моторин Вам отдельный респект, что указали на мою невнимательность. Теперь переименовал все кнопки и привел в порядок. Anvg, к сожалению Ваш вариант так и не заработал. |
||
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
#14 18.02.2014 13:26:14
Эта строчка была у Вас ещё в первом ответе)) |
||||
Александр Моторин Пользователь Сообщений: 958 |
#15 18.02.2014 13:40:41
|
||
IvanSh Пользователь Сообщений: 57 |
#16 18.02.2014 16:10:10 Александр спасибо, за меня сделали код. Только собрался писать, именно это и нужно было реализовать ))) тока табличка с текстом кнопок будет на другом листе. Единственно не понимаю зачем такие усложнения, я сделал проще:
Изменено: IvanSh — 18.02.2014 21:42:42 |
||
IvanSh Пользователь Сообщений: 57 |
#17 18.02.2014 16:11:49
Да, виноват, мне просто в голову не пришло посмотреть в левое окошечко с названием кнопки )) и я долго искал где название кнопки посмотреть. Так сказать идей много, а матчасть на двоечку ) Изменено: IvanSh — 18.02.2014 16:12:23 |
||
I assigned an Excel VBA macro to a command button, and I am needing to know how to update the text to «Loading» when the macro is executed.
I have tested the following code with no success:
Worksheets("Sheet1").Button9.Caption = "Loading"
K.Dᴀᴠɪs
9,89511 gold badges34 silver badges43 bronze badges
asked Feb 2, 2017 at 10:49
Belgacem KsiksiBelgacem Ksiksi
2721 gold badge5 silver badges21 bronze badges
2
Go via the Buttons
collection:
Worksheets("Sheet1").Buttons("Button9").Text = "Loading"
answered Feb 2, 2017 at 11:30
1
You should try using an Active X button and add this code to that active X button click event. Also, put this code in the same worksheet where this active X button is.:
I am assuming your button starting text is «Original Text». You can replace it with your own text in the code. Also, I am adding 5 seconds delay just to mimic that something is loading. you can replace that part with your code. Also note that in my case active X button name is CommandButton21, in your case it may be different. Update your code accordingly.
Private Sub CommandButton21_Click()
CommandButton21.Caption = "Loading"
Application.Wait (Now + TimeValue("0:00:05"))
CommandButton21.Caption = "Original Text"
End Sub
answered Feb 2, 2017 at 11:33
AnandAnand
3632 silver badges13 bronze badges
This worked for me
Worksheets(«Sheet1»).Button9.TextFrame.Characters.Text = «Loading»
answered Apr 16, 2020 at 5:41
If it is an Active X button:
Dim ws As Worksheets
Set ws = Worksheets("Sheet1")
Worksheets(ws.Name).addbutton.Caption = "Ajouter"
Where addbutton
is the button name.
Gass
6,4822 gold badges33 silver badges37 bronze badges
answered Jun 26, 2021 at 9:07
Как уже было сказано во введении, у программных объектов имеются различные свойства. Первое очевидное желание заключается в том, чтобы просмотреть (а затем и изменить) значения свойств объектов. Для просмотра свойств объекта его необходимо сначала выделить в режиме конструктора (щелкнуть на нем мышью), а затем с помощью пиктограммы Свойства (она расположена рядом с пиктограммой Режим конструктора) открыть окно свойств (рис. 1.8).
Рис. 1.8. Окно свойств объекта
В окне свойств отображается таблица набор строк в два столбца. При этом левый столбец отводится для названий свойств, а в нравом расположены значения этих свойств. Понятно, что содержание левого столбца изменить нельзя свойства объекта уже определены его разработчиком (компанией Microsoft). А значения свойств мы поменять можем для этого достаточно щелкнуть в ячейке правого столбца и изменить се содержание.
Если приглядеться к окну на рис. 1.8, то мы увидим, что для ряда свойств возможны только два варианта значений. Например, для свойства Visible (определяет видимость объекта на экране) возможны только значения False и True. Такая ситуация наблюдается и для ряда других свойств. Среди них можно отметить Enabled определяет доступ к объекту в режиме выполнения (если установить для этого свойства значение False и выйти из режима конструктора, то объект будет недоступен). Свойство AutoSize позволяет обеспечить автоматическую подгонку размеров кнопки под размер текста, расположенного на ней. Такое будет происходить, если установить True в качестве значения данного свойства.
Для некоторых других свойств следует устанавливать числовые значения. Так, местоположение и размеры элемента управления определяются следующими свойствами:
- Width ширина;
- Height высота;
- Тор координата верхней границы элемента, начиная от верхней части листа;
- Left координата левой границы элемента, начиная от левой части листа.
Если для свойства Enabled установлено значение False, то элемент управления на экране будет выглядеть более блекло (такая ситуация знакома по работе с различными приложениями, когда ряд разделов меню недоступен).
Рис. 1.9. Палитра цветов
Если теперь в режиме конструктора выбудете перемещать созданную на листе кнопку но экрану и изменять ее размеры (с помощью окружающих ее маркеров), то соответствующие значения в окне свойств будут меняться. И наоборот, изменив значения в окне свойств, вы увидите изменения на экране. Для установки значений ряда свойств следует использовать пиктографические меню. Так, с помощью свойства BackColor можно изменять цвет кнопки. Для этого всего лишь требуется щелчком мыши выбрать необходимый цвет (рис. 1.9). Аналогичное свойство ForeColor определяет цвет текста на кнопке. За надпись на кнопке отвечает другое свойство Caption. Если напротив названия этого свойства ввести текст (рис. 1.10), то мы увидим его и на кнопке.
Рис. 1.10. Установка значения свойства Caption
Для изменения шрифта текста на кнопке имеется свойство Font. Если в окне свойств попытаться изменить его значение, то перед вами откроется знакомое (но работе с различными приложениями) окно для выбора шрифта и размера букв (рис. 1.11). При этом технические действия здесь выполняются с помощью щелчков мышью.
Рис. 1.11. Окно диалога для выбора шрифта надписи на кнопке
Еще одно интересное свойство, Picture, позволяет разместить на кнопке изображение (рис. 1.12) из графического файла. Для этого в качестве значения свойства следует указать имя файла. Это действие производится с помощью стандартного диалогового окна (рис. 1.13), в котором необходимо выбрать один из графических файлов на компьютере либо в сети. В случае, если вы захотите убрать изображение, то в ноле для значения данного свойства следует воспользоваться клавишей Delete.
Во введении уже упоминалось, что основное свойство объекта это имя. В окне свойств оно называется Name. Как мы видели (см. рис. 1.8) на примере создания кнопки, Excel автоматически присвоил ей имя. Имя первой созданной кнопки на рабочем листе по умолчанию CommandButtonl, которое вы при желании можете изменить. Явной необходимости изменения имен, которые присваиваются по умолчанию, нет. Однако очень часто программисты назначают объектам свои имена. Это связано с тем, что к любым объектам на листе мы можем получить доступ из текста программы (фактически требуется обращаться к свойствам и методам этих объектов), указав имя конкретного объекта. В связи с этим с точки зрения организации программного кода часто удобнее использовать свою систему назначения имен объектов.
Рис. 1.12. Размещение на кнопке изображения
Система формирования имен по умолчанию заключается в комбинации типа элемента управления (CommandButton — командная кнопка) и числа (порядкового номера элемента управления данного типа).
Для первой созданной кнопки имя — CommandButton1. Если мы на рабочем листе разместим еще одну кнопку, то она будет иметь имя CommandButton2. При добавлении последующих кнопок данный принцип сохраняется. Если вы все же решитесь изменить имя, то вместо CommandButton1 в окне свойств следует набрать слово или словосочетание, которое вас устраивает. Но заметим, что оно должно быть без пробелов внутри (частая ошибка в первых разработках). В качестве примера подберем новое имя для кнопки — PrimerButton.
Рис. 1.13. Окно диалога для выбора графического файла
Теперь, если вы произвели описанные выше установки (а также убрали изображение очистили значение в свойстве Picture), кнопка будет выглядеть так, как показано на рис. 1.14. Для свойства AutoSize здесь установлено значение True, что позволяет подогнать размеры кнопки под расположенную на ней надпись.
С подобных шагов начинается любая разработка на листе размещаются элементы ActiveX, и ряду их свойств присваиваются необходимые значения. На первый взгляд свойства Name и Caption похожи, и кажется, одно из них является лишним. Однако это не так, и в связи с этим дадим небольшое пояснение. Дело в том, что Name внутреннее название объекта, и значение этого свойства используется на программном уровне (во введении об этом уже шла речь). Если мы хотим использовать в программном коде обращение к свойствам и методам объекта, то в строке программной процедуры необходимо указать имя объекта. Свойство же Caption отвечает просто за надпись на кнопке, и значение его только отображается на экране.
Реально у каждого элемента ActiveX имеется много свойств. Некоторые из них являются общими для большинства (или даже для всех) элементов ActiveX, а другие свойства уникальны для определенных элементов управления.
Рис. 1.14. Установка свойств кнопки
Таким образом, результатом выполненных действий явились создание нового объекта в нашей рабочей книге Microsoft Excel и установка значений для ряда его свойств. Вообще, в режиме конструктора мы размещаем на рабочем листе элементы ActiveX и устанавливаем значения их свойств, а в режиме выполнения работаем с созданными объектами (щелкаем кнопками, вводим текст в текстовые окна и т. д.).
0 / 0 / 0 Регистрация: 11.07.2016 Сообщений: 39 |
|
1 |
|
Менять надписи на кнопках04.10.2016, 09:50. Показов 7310. Ответов 2
Здравствуйте! У меня такой вопрос: как сделать так, чтобы при нажатии на кнопку на ней менялась надпись? Не хотелось бы преобразовывать её в переключатель. Думала применить Caption, не сработало…но могла написать неправильно, не исключаю))
0 |
Заблокирован |
||||
04.10.2016, 09:54 |
2 |
|||
Сообщение было отмечено yuptica как решение Решение
1 |
0 / 0 / 0 Регистрация: 11.07.2016 Сообщений: 39 |
|
04.10.2016, 10:18 [ТС] |
3 |
Спасибо огромное!!!!
0 |