Vba excel текст кнопки

Элемент управления пользовательской формы CommandButton, используемый в VBA Excel для запуска процедур и макросов. Свойства кнопки, примеры кода с ней.

UserForm.CommandButton – это элемент управления пользовательской формы, предназначенный исключительно для запуска процедур и макросов VBA Excel.

Элемент управления CommandButton

Для запуска процедур и макросов обычно используется событие кнопки – 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
Регистрация: 16.02.2014

Еще раз здрасте!
Так получилось, что я навтыкал в проект кучу кнопок из Элементов управления форм. Кнопки запускают макросы.
Теперь возникла необходимость по определенному событию с помощью макроса(либо иным способом) менять текст в этих кнопках (делать перевод на другой язык).
Например Button1 = «Играть», после выполнения макроса Button1 = «Play»

 1. Как вообще определить названия этих кнопок, тк в свойствах их нигде нет?
 2. Можно ли будет обойтись без русских слов в коде VBA (текст кнопок планирую подгружать с соседнего листа)?
 3. Как выглядит пример такой функции.
 4. После переименования не слетят ли навешенные на них макросы?

Может кто-то вспомнит по ActiveX, но это крайний случай, если не получится с обычными кнопками ))

Изменено: IvanSh17.02.2014 22:35:37

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

#2

17.02.2014 22:28:52

В общем случае так:

Код
ActiveSheet.DrawingObjects("ИмяВашейКнопки").Characters.Text = "Мой текст"
 

IvanSh

Пользователь

Сообщений: 57
Регистрация: 16.02.2014

Как узнать ИмяВашейКнопки?  Это то что на ней в данный момент написано?

Если так то вот что выдает:

Изменено: IvanSh17.02.2014 22:38:42

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

Дайте пример файла с парой кнопок — всем будет проще.

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

#5

17.02.2014 22:53:40

Цитата
IvanSh пишет:
Как узнать ИмяВашейКнопки?Это то что на ней в данный момент написано?

Нет — это разные вещи. См. файл.

Прикрепленные файлы

  • Текст на кнопке.xls (23 КБ)

 

IvanSh

Пользователь

Сообщений: 57
Регистрация: 16.02.2014

Юрий, не работает как нужно. Я просто макрос вызываю не той кнопкой, которую переименовываю )) А вот на которую жму она переименовывается.
Задача одним кликом определенной кнопки перевести все кнопки проекта на другой язык, при чем язык так же задается динамически (но это другая история).

 

IvanSh

Пользователь

Сообщений: 57
Регистрация: 16.02.2014

#7

17.02.2014 23:11:42

Цитата
Hugo пишет:
Дайте пример файла с парой кнопок — всем будет проще.

Вот пример, там и задание ))

Прикрепленные файлы

  • Текст на кнопке.xls (33.5 КБ)

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#8

17.02.2014 23:30:10

тупо:

Код
Sub Кнопка6_Щелчок()
    For I = 2 To 4
    ActiveSheet.Shapes.Range(Array("Button " & I)).Select
    Selection.Characters.Text = "Button " & I-1
    Next
End Sub

Изменено: Sanja17.02.2014 23:34:38

Согласие есть продукт при полном непротивлении сторон.

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

Если одна кнопка должна поменять язык на всех остальных, то так (см. файл)

 

Как узнать ИмяВашейКнопки?

Изменено: Александр Моторин18.02.2014 00:19:54

 

anvg

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#11

18.02.2014 05:05:30

Цитата
тк в свойствах их нигде нет?

Посмотреть свойства Button можно в Object Browser, если включить в его вспомогательном меню Show Hidden Members. И как вариант, в дополнение к решению Юрия М, не обходя все Shape на листе.

Код
    Dim pButton As Button
    For Each pButton In ActiveSheet.Buttons
        If pButton.Name <> "Button 4" Then
            If Lang Then
                pButton.Text = "My first text"
            Else
                pButton.Text = "Мой первый текст"
            End If
        End If
    Next
    Lang = Not Lang

Успехов.

 

IvanSh

Пользователь

Сообщений: 57
Регистрация: 16.02.2014

Ребята, спасибо! Это то что нужно ))) щас  буду пробовать, но только буду обзывать кнопки не все одинаково, а текст кнопки будет соответствовать значению массива (списка) в соответсвии с цифрой в конце названия кнопки: Button1.Characters.Text = mass[1], Button2.Characters.Text = mass[2] … и тд

Хотя судя по всему придется использовать двумерный массив mass[i,j], где i — перевод слова, j -язык

Изменено: IvanSh18.02.2014 08:26:57

 

IvanSh

Пользователь

Сообщений: 57
Регистрация: 16.02.2014

#13

18.02.2014 12:38:44

Короче потестил предложенный код: Юрий М спс у Вас все работает, мне нужна была именно строчка:

Код
ActiveSheet.DrawingObjects("Button1").Characters.Text = "New name"

Алекс Моторин Вам отдельный респект, что указали на мою невнимательность. Теперь переименовал все кнопки и привел в порядок.

Anvg, к сожалению Ваш вариант так и не заработал.

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

#14

18.02.2014 13:26:14

Цитата
IvanSh пишет:
мне нужна была именно строчка:

Код
 ActiveSheet.DrawingObjects("Button1").Characters.Text = "New name" 

Эта строчка была у Вас ещё в первом ответе))

 

Александр Моторин

Пользователь

Сообщений: 958
Регистрация: 31.12.2012

#15

18.02.2014 13:40:41

Код
Option Explicit
Dim K
Sub QWERT()
K = IIf(K = 3, 2, 3)
переименовать K
End Sub
Sub переименовать(Z)
Dim i
For i = 1 To 8
ActiveSheet.DrawingObjects("Кнопка " & i).Characters.Text = WorksheetFunction.VLookup(i, Range("язык"), Z, 0)
Next
End Sub

 

IvanSh

Пользователь

Сообщений: 57
Регистрация: 16.02.2014

#16

18.02.2014 16:10:10

Александр спасибо, за меня сделали код. Только собрался писать, именно это и нужно было реализовать ))) тока табличка с текстом кнопок будет на другом листе.

Единственно не понимаю зачем такие усложнения, я сделал проще:

Код
j = WorksheetFunction.Match(Sheets("List1").Range("F34").Value, Range("Lang"), 0)

For i = 1 To Button_count    /количество кнопок/
     Sheets("Любой лист").DrawingObjects("Button" & i).Characters.Text = WorksheetFunction.VLookup(i, Range("Button_transl"), j, 0)
Next 

Изменено: IvanSh18.02.2014 21:42:42

 

IvanSh

Пользователь

Сообщений: 57
Регистрация: 16.02.2014

#17

18.02.2014 16:11:49

Цитата
Юрий М пишет:
Эта строчка была у Вас ещё в первом ответе))

Да, виноват, мне просто в голову не пришло посмотреть в левое окошечко с названием кнопки )) и я долго искал где название кнопки посмотреть. Так сказать идей много, а матчасть на двоечку )

Изменено: IvanSh18.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's user avatar

K.Dᴀᴠɪs

9,89511 gold badges34 silver badges43 bronze badges

asked Feb 2, 2017 at 10:49

Belgacem Ksiksi's user avatar

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

Alex K.'s user avatar

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

Anand's user avatar

AnandAnand

3632 silver badges13 bronze badges

This worked for me

Worksheets(«Sheet1»).Button9.TextFrame.Characters.Text = «Loading»

answered Apr 16, 2020 at 5:41

Excelgzh's user avatar

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's user avatar

Gass

6,4822 gold badges33 silver badges37 bronze badges

answered Jun 26, 2021 at 9:07

NGABE ENONGENE BRANDON's user avatar

Как уже было сказано во введении, у программных объектов имеются различные свойства. Первое очевидное желание заключается в том, чтобы просмотреть (а затем и изменить) значения свойств объектов. Для просмотра свойств объекта его необходимо сначала выделить в режиме конструктора (щелкнуть на нем мышью), а затем с помощью пиктограммы Свойства (она расположена рядом с пиктограммой Режим конструктора) открыть окно свойств (рис. 1.8).

Рис. 1.8. Окно свойств объекта

Рис. 1.8. Окно свойств объекта

В окне свойств отображается таблица набор строк в два столбца. При этом левый столбец отводится для названий свойств, а в нравом расположены значения этих свойств. Понятно, что содержание левого столбца изменить нельзя свойства объекта уже определены его разработчиком (компанией Microsoft). А значения свойств мы поменять можем для этого достаточно щелкнуть в ячейке правого столбца и изменить се содержание.

Если приглядеться к окну на рис. 1.8, то мы увидим, что для ряда свойств возможны только два варианта значений. Например, для свойства Visible (определяет видимость объекта на экране) возможны только значения False и True. Такая ситуация наблюдается и для ряда других свойств. Среди них можно отметить Enabled определяет доступ к объекту в режиме выполнения (если установить для этого свойства значение False и выйти из режима конструктора, то объект будет недоступен). Свойство AutoSize позволяет обеспечить автоматическую подгонку размеров кнопки под размер текста, расположенного на ней. Такое будет происходить, если установить True в качестве значения данного свойства.

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

  • Width ширина;
  • Height высота;
  • Тор координата верхней границы элемента, начиная от верхней части листа;
  • Left координата левой границы элемента, начиная от левой части листа.

Если для свойства Enabled установлено значение False, то элемент управления на экране будет выглядеть более блекло (такая ситуация знакома по работе с различными приложениями, когда ряд разделов меню недоступен).

Рис. 1.9. Палитра цветов

Рис. 1.9. Палитра цветов

Если теперь в режиме конструктора выбудете перемещать созданную на листе кнопку но экрану и изменять ее размеры (с помощью окружающих ее маркеров), то соответствующие значения в окне свойств будут меняться. И наоборот, изменив значения в окне свойств, вы увидите изменения на экране. Для установки значений ряда свойств следует использовать пиктографические меню. Так, с помощью свойства BackColor можно изменять цвет кнопки. Для этого всего лишь требуется щелчком мыши выбрать необходимый цвет (рис. 1.9). Аналогичное свойство ForeColor определяет цвет текста на кнопке. За надпись на кнопке отвечает другое свойство Caption. Если напротив названия этого свойства ввести текст (рис. 1.10), то мы увидим его и на кнопке.

Рис. 1.10. Установка значения свойства Caption

Рис. 1.10. Установка значения свойства Caption

Для изменения шрифта текста на кнопке имеется свойство Font. Если в окне свойств попытаться изменить его значение, то перед вами откроется знакомое (но работе с различными приложениями) окно для выбора шрифта и размера букв (рис. 1.11). При этом технические действия здесь выполняются с помощью щелчков мышью.

Рис. 1.11. Окно диалога для выбора шрифта надписи на кнопке

Рис. 1.11. Окно диалога для выбора шрифта надписи на кнопке

Еще одно интересное свойство, Picture, позволяет разместить на кнопке изображение (рис. 1.12) из графического файла. Для этого в качестве значения свойства следует указать имя файла. Это действие производится с помощью стандартного диалогового окна (рис. 1.13), в котором необходимо выбрать один из графических файлов на компьютере либо в сети. В случае, если вы захотите убрать изображение, то в ноле для значения данного свойства следует воспользоваться клавишей Delete.

Во введении уже упоминалось, что основное свойство объекта это имя. В окне свойств оно называется Name. Как мы видели (см. рис. 1.8) на примере создания кнопки, Excel автоматически присвоил ей имя. Имя первой созданной кнопки на рабочем листе по умолчанию CommandButtonl, которое вы при желании можете изменить. Явной необходимости изменения имен, которые присваиваются по умолчанию, нет. Однако очень часто программисты назначают объектам свои имена. Это связано с тем, что к любым объектам на листе мы можем получить доступ из текста программы (фактически требуется обращаться к свойствам и методам этих объектов), указав имя конкретного объекта. В связи с этим с точки зрения организации программного кода часто удобнее использовать свою систему назначения имен объектов.

Рис. 1.12. Размещение на кнопке изображения

Рис. 1.12. Размещение на кнопке изображения

Система формирования имен по умолчанию заключается в комбинации типа элемента управления (CommandButton — командная кнопка) и числа (порядкового номера элемента управления данного типа).

Для первой созданной кнопки имя — CommandButton1. Если мы на рабочем листе разместим еще одну кнопку, то она будет иметь имя CommandButton2. При добавлении последующих кнопок данный принцип сохраняется. Если вы все же решитесь изменить имя, то вместо CommandButton1 в окне свойств следует набрать слово или словосочетание, которое вас устраивает. Но заметим, что оно должно быть без пробелов внутри (частая ошибка в первых разработках). В качестве примера подберем новое имя для кнопки — PrimerButton.

Рис. 1.13. Окно диалога для выбора графического файла

Рис. 1.13. Окно диалога для выбора графического файла

Теперь, если вы произвели описанные выше установки (а также убрали изображение очистили значение в свойстве Picture), кнопка будет выглядеть так, как показано на рис. 1.14. Для свойства AutoSize здесь установлено значение True, что позволяет подогнать размеры кнопки под расположенную на ней надпись.

С подобных шагов начинается любая разработка на листе размещаются элементы ActiveX, и ряду их свойств присваиваются необходимые значения. На первый взгляд свойства Name и Caption похожи, и кажется, одно из них является лишним. Однако это не так, и в связи с этим дадим небольшое пояснение. Дело в том, что Name внутреннее название объекта, и значение этого свойства используется на программном уровне (во введении об этом уже шла речь). Если мы хотим использовать в программном коде обращение к свойствам и методам объекта, то в строке программной процедуры необходимо указать имя объекта. Свойство же Caption отвечает просто за надпись на кнопке, и значение его только отображается на экране.

Реально у каждого элемента ActiveX имеется много свойств. Некоторые из них являются общими для большинства (или даже для всех) элементов ActiveX, а другие свойства уникальны для определенных элементов управления.

Рис. 1.14. Установка свойств кнопки

Рис. 1.14. Установка свойств кнопки

Таким образом, результатом выполненных действий явились создание нового объекта в нашей рабочей книге Microsoft Excel и установка значений для ряда его свойств. Вообще, в режиме конструктора мы размещаем на рабочем листе элементы ActiveX и устанавливаем значения их свойств, а в режиме выполнения работаем с созданными объектами (щелкаем кнопками, вводим текст в текстовые окна и т. д.).

0 / 0 / 0

Регистрация: 11.07.2016

Сообщений: 39

1

Менять надписи на кнопках

04.10.2016, 09:50. Показов 7310. Ответов 2


Студворк — интернет-сервис помощи студентам

Здравствуйте! У меня такой вопрос: как сделать так, чтобы при нажатии на кнопку на ней менялась надпись? Не хотелось бы преобразовывать её в переключатель. Думала применить Caption, не сработало…но могла написать неправильно, не исключаю))
Подскажите пожалуйста.



0



Shersh

Заблокирован

04.10.2016, 09:54

2

Лучший ответ Сообщение было отмечено yuptica как решение

Решение

Visual Basic
1
2
3
Private Sub CommandButton1_Click()
If CommandButton1.Caption = "1" Then CommandButton1.Caption = "2" Else CommandButton1.Caption = "1"
End Sub



1



0 / 0 / 0

Регистрация: 11.07.2016

Сообщений: 39

04.10.2016, 10:18

 [ТС]

3

Спасибо огромное!!!!



0



Понравилась статья? Поделить с друзьями:
  • Vba excel текст html
  • Vba excel таймер обратного отсчета
  • Vba excel таймер задержки
  • Vba excel таймер выполнения
  • Vba excel таблица умножения