Вставка командной кнопки на рабочий лист для начинающих программировать с нуля. Кнопки из коллекций «Элементы управления формы» и «Элементы ActiveX».
Начинаем программировать с нуля
Часть 3. Первая кнопка
[Часть 1] [Часть 2] [Часть 3] [Часть 4]
Добавление вкладки «Разработчик»
Вкладка с инструментами, связанными с VBA Excel, называется «Разработчик». Если этой вкладки нет на вашей ленте, добавьте ее через окно «Параметры»:
Порядок действий:
- Откройте окно «Параметры» через меню «Файл».
- Выберите вкладку «Настроить ленту».
- В правой колонке установите галочку у пункта «Разработчик» и нажмите «OK».
Кнопка – элемент управления формы
Вставка кнопки на лист
- Выберите вкладку «Разработчик» и нажмите на кнопку «Вставить».
- Нажмите на значок кнопки в коллекции «Элементы управления формы».
- Кликните в любом месте на рабочем листе Excel.
- Откроется окно «Назначить макрос объекту». Нажмите «Отмена», так как макрос для этой кнопки еще не готов.
- После нажатия кнопки «Отмена», на рабочем листе появится новая кнопка из коллекции «Элементы управления формы» в режиме редактирования.
Ухватив мышкой за один из кружочков, можно изменить размер кнопки. Ухватив кнопку за границу, можно перетащить ее в другое место. Также, в режиме редактирования, можно изменить название кнопки прямо на ее поверхности.
Чтобы выйти из режима редактирования кнопки из коллекции «Элементы управления формы», кликните в любом месте на рабочем листе.
Чтобы вернуться в режим редактирования кнопки, кликните по ней правой кнопкой мыши и выберите из контекстного меню нужный пункт. Если вы хотите изменить размер или размещение кнопки перетаскиванием, кликните левой кнопкой мыши в любом месте рабочего листа. После первого клика контекстное меню закроется, а кнопка останется в режиме редактирования.
Создание процедуры для кнопки
Кнопке из коллекции «Элементы управления формы» можно назначить макрос (процедуру), размещенную в стандартном программном модуле.
Создайте или откройте файл Excel с расширением .xlsm (Книга Excel с поддержкой макросов) и перейдите в редактор VBA, нажав сочетание клавиш «Левая_клавиша_Alt+F11».
Если вы не создавали ранее в этом проекте VBA стандартный программный модуль, нажмите кнопку «Module» во вкладке «Insert» главного меню. То же подменю откроется при нажатии на вторую кнопку (после значка Excel) на панели инструментов.
Ссылка на модуль появится в проводнике слева. Если модуль создан ранее, дважды кликните по его ссылке в проводнике, и он откроется справа для редактирования.
Нажмите кнопку «Procedure…» во вкладке «Insert» главного меню. Та же ссылка будет доступна при нажатии на вторую кнопку после значка Excel на панели инструментов.
В открывшемся окне добавления шаблона процедуры оставьте выбранным переключатель «Sub», вставьте в поле «Name» название процедуры «NovayaProtsedura» и нажмите «OK».
В стандартный программный модуль будет вставлен шаблон процедуры «NovayaProtsedura».
Вставьте внутрь шаблона процедуры следующий код:
1 2 3 4 5 6 7 |
'Записываем в ячейку A1 число 44 Cells(1, 1) = 44 'Записываем в ячейку B1 число 56 Cells(1, 2) = 56 'Записываем в ячейку C1 формулу, которая 'вычисляет сумму значений ячеек A1 и B1 Cells(1, 3) = "=A1+B1" |
На этом процедура (подпрограмма, макрос) для кнопки готова.
Назначение макроса кнопке
Кликните правой кнопкой мыши по кнопке на рабочем листе и в контекстном меню выберите строку «Назначить макрос…», откроется окно «Назначить макрос объекту».
Выберите в списке процедуру «NovayaProtsedura» и нажмите «OK». Кликните левой кнопкой мыши по рабочему листу, чтобы командная кнопка вышла из режима редактирования.
Теперь можете нажать созданную кнопку из коллекции «Элементы управления формы» для проверки ее работоспособности.
Кнопка – элемент ActiveX
Вставка кнопки на лист
- Выберите вкладку «Разработчик» и нажмите на кнопку «Вставить».
- Нажмите на значок кнопки в коллекции «Элементы ActiveX».
- Кликните по рабочему листу и кнопка из коллекции «Элементы ActiveX» появится рядом с курсором.
- Автоматически включится режим редактирования, включение и отключение которого осуществляется кнопкой «Режим конструктора».
Ухватив кнопку за кружок, можно изменить ее размер, а ухватив за границу – перетащить на другое место. Чтобы отредактировать наименование кнопки, нужно кликнуть на ней правой кнопкой мыши и в контекстном меню выбрать «Объект CommandButton» > «Edit».
Добавление процедуры
Кликните дважды по кнопке из коллекции «Элементы ActiveX» левой кнопкой мыши в режиме конструктора. Это приведет к открытию модуля листа, на который вставлена кнопка, и записи шаблона процедуры «CommandButton1_Click».
Вставьте внутрь шаблона процедуры код, который будет очищать ячейки A1, B1 и C1:
1 |
Range("A1:C1").Clear |
Перейдите на рабочий лист и, если кнопка «Режим конструктора» затемнена, нажмите на нее, чтобы выйти из режима редактирования. После этого нажмите кнопку «CommandButton1», и она очистит ячейки, заполненные ранее нажатием кнопки «Кнопка 1».
Теперь кнопка из коллекции «Элементы управления формы» (Кнопка 1) будет заполнять ячейки диапазона «A1:C1», а кнопка из коллекции «Элементы ActiveX» (CommandButton1) очищать их.
Здравствуйте!
А как добавить кнопку на лист макросом (по аналогии с Разработчик\Добавить\Кнопку ActiveX)?
Задать координаты, по которым она будет находиться?
Например, мне нужно, чтобы кнопка находилась поверх ячейки G11 и имела те же размеры, что и ячейка — как это сделать?
Пытаюсь высчитать координаты и задать их для кнопки — получается какая-то ерунда,
как будто разные единицы измерения вообще
Добрый день!
Высота строки задается в пунктах, а ширина столбца в символах, поэтому их числовые значения не соответствуют друг другу по фактическому размеру. Подробнее…
Есть решение проще:
Решение прекрасное и работает. В свойствах можно выбрать задний фон, шрифт, начертание и размер.
А как изменить интервал между краем текста, и границей кнопки, и цвет самого шрифта?
Это возможно?
P.S. Хотелось бы кнопку покрасивее сделать 🙂
P.S.S. Посоветуйте книгу, для чайников ), где можно почитать о VBA для Excel.
Привет, Виктор!
Кликните правой кнопкой мыши по кнопке из коллекции «Элементы управления формы» и выберите в контекстном меню «Формат объекта». На вкладке «Шрифт» установите цвет шрифта, а на вкладке «Поля» — размер внутренних полей.
Кликните правой кнопкой мыши по кнопке из коллекции «Элементы ActiveX» в режиме разработчика и выберите в контекстном меню «Свойства». За цвет шрифта отвечает свойство «ForeColor», в поле справа от названия выберите нужный цвет. Ручное изменение внутренних полей не предусмотрено.
Насчет книги: Джон Уокенбах «Профессиональное программирование на VBA в Excel 2010».
Благодарю, Евгений. За книгу, отдельное спасибо. Все-таки тяжело найти то что надо в объемах выдаваемыми поисковиками. Начал изучать.
По кнопке — нашел надстройку. Осталось разобраться в коде и подправить под себя. В этом, с помощью книги и и-нета, разберусь.
Удачи!
Добрый день. А как сделать так, чтобы кнопка при нажатии на нее мышкой, в ней появилась надпись, и при повторном нажатии, надпись исчезала, на этой самой кнопке? Что-то по типу «включить — выключить»? Понимаю, задача может быть простой, но я чет запутался.
Добрый день, Виктор!
Спасибо. Все получилось.
Здравствуйте, скажите пожалуйста, чем отличаются элементы управления формы от элементов ActiveX?
Здравствуйте, Сабина!
Если коротко, то элементы ActiveX появились позже элементов управления формы и обладают большими возможностями по настройке внешнего вида, поведения, шрифтов и других характеристик. Подробнее на сайте разработчиков.
Благодарю, Евгений!
Приветствую
В книге есть несколько макросов: mk1, mk2, mk3…mk n
В ячейке D2 числовые значения: 1, 2, 3 … n
как можно на одну кнопку повесить запуск всех макросов ?
т.е.
если D2=3, то при нажатии на конку должен активироваться mk3
если D2=7 — запускался макрос с именем «mk7»
Добрый день!
Здесь Лист19 — это не имя ярлыка, а имя листа, которое в проводнике проекта расположено слева без скобок.
Евгений, спасибо за уделенное время.
" ...Здесь Лист19 — это не имя ярлыка, ..."
в домашнем пользовании Macintosh.
Расположение и названия в проводнике — отличается от Win.
Если прибавить мои «глубокие знания» и … в результате команда не выполняется
При построчном исполнении макроса, машина ошибок не находит, но и результата никакого нет
Sub CommandButton1_Click()
Dim s As String
s = "maks_Sh.xls!Lab.mk" & Range("D2")
Application.Run s
End Sub
нельзя ли написать полностью код
Книга называется
"Maks_Sh.xls"
В книге всего один рабочий лист
"Lab"
Все макросы записаны в одном модуле (если это важно)
P.S.
такая команда
s = "maks_Sh.xls!Лист1.mk" & Range("D2")
тоже не ничего не исполняет
В моем примере все макросы находятся в модуле листа. У вас, наверное, в стандартном модуле, и поэтому код не работает. Попробуйте так:
Номер модуля поставьте свой.
всё работает , спасибо
Доходчивый урок. Спасибо.
Здравствуйте. Подскажите пожалуйста. Можно ли программно отрисовать кнопки и вставить их в нужны ячейки одного столбца. Программно вставить код нажатия этих кнопок, для перехода на лист, название которого (листа) будет заранее вписано в ячейку.
Переформулирую вопрос.
Можно ли программно, на листе отрисовать кнопки в определенных ячейках одного столбца. Код нажатия этих кнопок, для перехода на другой лист, название которого (листа) будет заранее вписано в ячейку с отрисованной кнопкой ?
Обсуждение закрыто.