Как узнать название кнопки excel

Обновлено: 03.07.2024

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

Вот такой код.
По нажатию на кнопку должно появиться ее имя и выделиться ячейка под ней.
Как сделать без прямого указания ее имени в 1й строке? Если у вас и седьмой блин комом, к чёрту блины - пеките комочки.

Вот варианты попроще:

И пример файла (с 3 разными типами кнопок):


Спасибо, попробовал второй вариант - сработало.
Правда, после замены Me. на ActiveSheet.
Что зачит это Me?
И еще, почему в Вашем файле нет модулей, а пример работает?

P.S. "Благодарности принимаются . " - можно подробности в личку?

Если у вас и седьмой блин комом, к чёрту блины - пеките комочки.

Me - это ссылка на объект, в модуле которого расположен код.
В данном случае, код расположен в модуле листа - поэтому Me ссылается на лист, на котором расположены кнопки.

почему в Вашем файле нет модулей, а пример работает?
Код можно размещать как в стандартном модуле, так и в модулях листов или книги.
Есть, конечно, разница, но в данном случае это не принципиально. [B]
Код можно размещать как в стандартном модуле, так и в модулях листов или книги.
Есть, конечно, разница, но в данном случае это не принципиально. Если у вас и седьмой блин комом, к чёрту блины - пеките комочки.

Разница между Me и activesheet: набрав Me в модуле листа, и нажав точку, получаем выпадающий список методов для объекта типа Worksheet - это облегчает (ускоряет) набор кода.
После набора activesheet и точки, к сожалению, выпадающий список свойств и методов не появляется (недоработка Microsoft)

Разницы при использовании различных модулей для обычных макросов, вызываемых кнопкой на листе, нет.
Модули листов и книги обычно используются для обработчиков событий соответствующих объектов - например, чтобы отловить изменение ячейки, открытие книги, активацию листа, и т.п.

В стандартных модулях обычно помещают код, который должен быть доступен из других мест - к примеру, пользовательские функции, которые должны работать на всех листах.

Возможно ли программно узнать состояние сети?
Возможно ли программно узнать состояние сети (работает/не работае)?

Как программно узнать имя таблицы хранимой в БД
Сделал возможность в программе работать с любой БД . но при этом что бы открыть нужную таблицу.

Подскажите как узнать имя BackgroundImage у кнопки, если сама картинка находится в ресурсах
Здраствуйте. Суть проблемы: имеется кнопка, в свойствах BackgroundImage которой из ресурсов проекта.

Как узнать полное имя файла зная его краткое имя?
например при запуске программы достаточно написать "Excel" или "Calc" при этом система уже в курсе.

Вопрос не совсем понятен. Первое, что напрашивается в ответ - Да плохо объяснил, У меня есть форма(см.рис) на ней кнопки и другие объекты допустим пользователь (навел мышь или может по другому событию) на кнопку и в событии произойдут действия после которых узнаем имя именно этой кнопки (в моем случаее Кнопка2) и это значение поместить в public переменную. потом например на другую кнопку навели получили уже ее имя в эту переменную. вот как то так Оказывается нет свойства Name у кнопок Access.
Может так? Так вот по "навел мышь или может по другому событию" и помещайте кодом имя этого обьекта в переменную.
Апострофф выше уже написал.
Ещё есть application.caller - но нужно точнее видеть задачу.

Я так понял такой код нужно сделать для всех объектов которые находятся на текущей форме?

Добавлено через 32 минуты
сделал как вы подсказали, на уровне формы все работает, но переменную полученную не получается использовать на всем проекте. Может можно сделать функции или процедуру в модуле( в которая будет узнавать имя объекта), а в событии ссылаться на нее

Добавлено через 1 минуту
Просто если так писать вашим способом для всех форм, это мне кажется очень не удобно что ли или не правильно

Объявляйте публичную переменную в модуле, а не в форме.
Ну и вообще мне кажется что это "это мне кажется очень не удобно что ли или не правильно" вот именно что не правильно. На кой вообще это нужно, это имя?
Или это только мне так кажется? Объявляйте публичную переменную в модуле, а не в форме. я и объявлял ее в модуле, просто я еще очень плохо разбараюсь в VBA может я и не туда вставил переменную, но объявлял я ее в отдельном модуль от этой формы

У меня есть таблица в которой хранятся названия всех этих объектов. Есть еще запрос на основании этой таблицы с правами доступа к этим объектам, эта переменная у меня будет находится в "условии отбора" в этом запросе, в итоге в запросе будет оставаться одна строчка с объектом который хранится в нашей переменной и с правом на этот объект. дальше еще идут действия не относящиеся к стоящей проблеме.

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

"правами доступа к этим объектам" - так может проще при активации формы поотключать запрещённые объекты?

Попытаюсь описать суть задачи в целом. Есть сотрудники у них есть роли(Закупщик, Инициатор, Вед)(это реализованно)
Есть таблица в которой записаны все формы и объекты на этих формах и доступы к ним(Р-редактировать, Ч-чтение, НД-не доступно, НВ- не видимо) В случае разрешения конфликта ролей добавлен ранг опции, чтобы они могли перекрывать друг друга, т.е если у человека 2 роли то "Р" всегда будет главнее "Ч" и т.д.(Это тоже реализованно)
ВАЖНО! сейчас я пытаюсь реализовать задачу которую описал Здесь. т.е получить переменную которая отсортирует запрос(см.рис) и там останется одна строка удовлетворяющая этой переменной. Далее когда останется одна строка из столбца "Право" я возьму значение в переменную и с ней произойдет следующееДопустим для поля).. если Переменная = "Р" Тогда поле доступно, если переменная = "НД" тогда доступ закрыт (ну что то в этом духе)


Если у вас есть иное решение после слова "ВАЖНО" поделитесь пожалуйста, сижу уже 2 дня над стоящей задачей(скоро крыша съедет, уже все сроки горят((((()

"правами доступа к этим объектам" - так может проще при активации формы поотключать запрещённые объекты? если подскажите как при активации буду очень признателен При инициализации формы смотрим права, и соответствующие объекты делаем кодом невидимимыми (! ) или неактивными. подскажите где покапать,по читать, может вы знаете как это написать, в кодинге я пока плох( не активными или не видимыми какая то функция должна проверять\делать или что то еще?) с Access'ом работал мало, больше в Экселе - так что как там при открытии формы проверить права не знаю.
В экселе проще - например имеем имя, его ищем в таблице, получаем список прав, по нему отключаем элементы.
Неактивные/невидимые - это меняем в свойствах элемента. Можно кодом, можно вручную.
Думаю в Access это тоже где-то должно быть. При инициализации формы смотрим права, и соответствующие объекты делаем кодом невидимимыми (! ) или неактивными.

получается перебором каждой строки в таблице где находятся права?

Добавлено через 3 минуты

подсказали вот такой код(не полный) для проверки таблицы, но как его до делать, остается вопросом для меня

Здравствуйте! Вопрос вот в чем. Рекордером записал Макрос, кое-что убрал и что-то добавил.В результате получилось так[vba]

[/vba]
Подскажите пожалуйста- возможно ли сделать тоже самое, но без выделения кнопки (обратиться напрямую или еще как нибудь) Недостаток здесь в том, что после выполнения этого Макроса кнопка остается выделенной. Как снять выделение не выделяя,например,любую ячейку?
Спасибо!

Здравствуйте! Вопрос вот в чем. Рекордером записал Макрос, кое-что убрал и что-то добавил.В результате получилось так[vba]

[/vba]
Подскажите пожалуйста- возможно ли сделать тоже самое, но без выделения кнопки (обратиться напрямую или еще как нибудь) Недостаток здесь в том, что после выполнения этого Макроса кнопка остается выделенной. Как снять выделение не выделяя,например,любую ячейку?
Спасибо! pechkin

[/vba]
Подскажите пожалуйста- возможно ли сделать тоже самое, но без выделения кнопки (обратиться напрямую или еще как нибудь) Недостаток здесь в том, что после выполнения этого Макроса кнопка остается выделенной. Как снять выделение не выделяя,например,любую ячейку?
Спасибо! Автор - pechkin
Дата добавления - 08.09.2014 в 12:22

[/vba] Автор - RAN
Дата добавления - 08.09.2014 в 12:39

Андрей, не узнаю тебя. Ты не заболел?
Без приложенного файла-примера не только советы даёшь, но и какие-то названия сам объектам даёшь, и их текст меняешь.
И самое интересное, что топик-стартеру твой пример подходит! Ты что, в Вольфы Мессинги перекрасился и теперь всё телепатически отгадывать будешь?
Во юзверги-то, не соблюдающие правила форума порадуются!

Андрей, не узнаю тебя. Ты не заболел?
Без приложенного файла-примера не только советы даёшь, но и какие-то названия сам объектам даёшь, и их текст меняешь.
И самое интересное, что топик-стартеру твой пример подходит! Ты что, в Вольфы Мессинги перекрасился и теперь всё телепатически отгадывать будешь?
Во юзверги-то, не соблюдающие правила форума порадуются!
Alex_ST

Леш, а зачем пример? По коду все ясно. Что отгадывать то?
А названия - так это я кусок из рабочего файла выдрал. Вот переименовывать лениво было.

Леш, а зачем пример? По коду все ясно. Что отгадывать то?
А названия - так это я кусок из рабочего файла выдрал. Вот переименовывать лениво было. RAN

Ну тогда уж ради примера можно и сильно сократить твою блокировку[vba]

Ну тогда уж ради примера можно и сильно сократить твою блокировку[vba]

[/vba] Автор - Alex_ST
Дата добавления - 09.09.2014 в 16:42

Читайте также: