Пример создания пользовательской формы в редакторе VBA Excel для начинающих программировать с нуля. Добавление на форму текстового поля и кнопки.
Начинаем программировать с нуля
Часть 4. Первая форма
[Часть 1] [Часть 2] [Часть 3] [Часть 4]
Создание пользовательской формы
Создайте или откройте файл Excel с расширением .xlsm
(Книга Excel с поддержкой макросов) или с расширением .xls
в старых версиях приложения.
Перейдите в редактор VBA, нажав сочетание клавиш «Левая_клавиша_Alt+F11».
В открывшемся окне редактора VBA выберите вкладку «Insert» главного меню и нажмите кнопку «UserForm». То же подменю откроется при нажатии на вторую кнопку (после значка Excel) на панели инструментов.
На экране редактора VBA появится новая пользовательская форма с именем «UserForm1»:
Добавление элементов управления
Обычно вместе с пользовательской формой открывается панель инструментов «Toolbox», как на изображении выше, с набором элементов управления формы. Если панель инструментов «Toolbox» не отобразилась, ее можно вызвать, нажав кнопку «Toolbox» во вкладке «View»:
При наведении курсора на элементы управления появляются подсказки.
Найдите на панели инструментов «Toolbox» элемент управления с подсказкой «TextBox», кликните по нему и, затем, кликните в любом месте рабочего поля формы. Элемент управления «TextBox» (текстовое поле) будет добавлен на форму.
Найдите на панели инструментов «Toolbox» элемент управления с подсказкой «CommandButton», кликните по нему и, затем, кликните в любом месте рабочего поля формы. Элемент управления «CommandButton» (кнопка) будет добавлен на форму.
Кликнув по элементу управления на форме, вы можете изменять его размер, перетягивая границы за белые квадратики, и перетаскивать по форме, ухватив за одну из границ. Кликнув по заголовку формы или по ее рабочему полю, вы можете также изменять ее размер, перетягивая границы за белые квадратики.
Нажатием клавиши «F4» вызывается окно свойств, с помощью которого можно вручную задавать значения свойств пользовательской формы и элементов управления. В окне свойств отображаются свойства выбранного элемента управления или формы, если выбрана она. Также окно свойств можно вызвать, нажав кнопку «Properties Window» во вкладке «View».
Отображение формы на экране
Чтобы запустить пользовательскую форму для просмотра из редактора VBA, необходимо выбрать ее, кликнув по заголовку или свободному от элементов управления полю, и совершить одно из трех действий:
- нажать клавишу «F5»;
- нажать на треугольник на панели инструментов (на изображении выше треугольник находится под вкладкой «Debug»);
- нажать кнопку «Run Sub/UserForm» во вкладке «Run».
Для запуска пользовательской формы с рабочего листа Excel, можно использовать кнопки, описанные в этой статье. Например, чтобы отобразить форму с помощью «кнопки – элемента ActiveX», используйте в модуле рабочего листа следующий код:
Private Sub CommandButton1_Click() UserForm1.Show End Sub |
Для «кнопки – элемента управления формы» можно использовать следующий код, размещенный в стандартном программном модуле:
Sub ShowUserForm() UserForm1.Show End Sub |
В результате вышеперечисленных действий мы получаем на рабочем листе Excel пользовательскую форму с мигающим курсором в текстовом поле:
Добавление программного кода
Программный код для пользовательской формы и элементов управления формы записывается в модуль формы. Перейти в модуль формы можно через контекстное меню, кликнув правой кнопкой мыши на поле формы или на ссылке «UserForm1» в проводнике слева и нажав кнопку «View Code».
Переходить между открытыми окнами в редакторе VBA можно через вкладку «Window» главного меню.
Изменить название пользовательской формы и элементов управления, их размеры и другие свойства можно через окно свойств (Properties Window), которое можно отобразить клавишей «F4». Мы же это сделаем с помощью кода VBA Excel, записанного в модуль формы.
Откройте модуль формы, кликнув правой кнопкой мыши по форме и нажав кнопку «View Code» контекстного меню. Скопируйте следующий код VBA, который будет задавать значения свойств формы и элементов управления перед ее отображением на экране:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
Private Sub UserForm_Initialize() ‘Me — это обращение к форме в ее модуле With Me ‘Присваиваем форме заголовок .Caption = «Новая форма» ‘Задаем ширину формы .Width = 300 ‘Задаем высоту формы .Height = 150 End With With TextBox1 ‘Задаем ширину текстового поля .Width = 200 ‘Задаем высоту текстового поля .Height = 20 ‘Задаем расстояние от внутреннего края ‘формы сверху до текстового поля .Top = 30 ‘Задаем расстояние от внутреннего края ‘формы слева до текстового поля, чтобы ‘текстовое поле оказалось по центру .Left = Me.Width / 2 — .Width / 2 — 6 ‘Задаем размер шрифта .Font.Size = 12 ‘Присваиваем текст по умолчанию .Text = «Напишите что-нибудь своё!» End With With CommandButton1 ‘Задаем ширину кнопки .Width = 70 ‘Задаем высоту кнопки .Height = 25 ‘Задаем расстояние от внутреннего края ‘формы сверху до кнопки .Top = 70 ‘Задаем расстояние от внутреннего края ‘формы слева до кнопки, чтобы ‘кнопка оказалось по центру .Left = Me.Width / 2 — .Width / 2 — 6 ‘Задаем размер шрифта .Font.Size = 12 ‘Присваиваем кнопке название .Caption = «OK» End With End Sub |
Вставьте скопированный код в модуль формы:
Познакомьтесь еще с одним способом отображения на экране пользовательской формы в процессе тестирования: установите курсор внутри процедуры UserForm_Initialize()
и нажмите клавишу «F5» или треугольник на панели инструментов. Все предыдущие способы (с выбором формы в редакторе и кнопками на рабочем листе) тоже работают.
В результате мы получаем следующую форму:
Теперь перейдите в редактор VBA, откройте проект формы «UserForm1» и дважды кликните по кнопке «CommandButton1». В результате откроется модуль формы и будет создан шаблон процедуры CommandButton1_Click()
, которая будет запускаться при нажатии кнопки:
Private Sub CommandButton1_Click() End Sub |
Вставьте внутрь шаблона процедуры CommandButton1_Click()
следующую строку кода, которая будет копировать текст из текстового поля в ячейку «A1» активного рабочего листа:
Range(«A1») = TextBox1.Text |
Отобразите пользовательскую форму на экране и проверьте работоспособность кнопки «OK».
This tutorial gives you an overview of what a UserForm Control is and how to add them to your form.
Sections:
What is a UserForm Control?
Adding a Control to a UserForm
List of Controls for UserForms
Notes
What is a UserForm Control?
Controls are the things that you see on a UserForm; they are the buttons, the text, the input areas, the tabs, and so on. Controls are the building blocks of the UserForm.
Without any Controls, the UserForm would just be a gray square with nothing on it.
Adding a Control to a UserForm
To make a UserForm do much of anything, we have to add a Control to it. In this section, I’ll show you how to add, edit, and manage controls.
Show the UserForm
Make sure the UserForm is visible.
Go to the VBA window (Alt + F11) and double-click the UserForm from the Project window on the left side of the screen — if you don’t see the Project window, hit Ctrl + R and it will appear.
Show the Toolbox
Click the UserForm and make sure that Toolbox appears; it’s a small box that contains the Controls for the UserForm. If you don’t see it, go to View > Toolbox and it will appear.
From the Toolbox, click the control that you want to add.
Add the Control
Let’s add a simple Label.
Click the button for the Label in the Toolbox and then move your mouse over the UserForm and click and drag the mouse over where you want the item to appear.
When you release the mouse button, the Control will appear.
Now, you have a new item in your UserForm.
Resize and Move the Control
To change the size of it, simple select the desired Control and click the white blocks around the edges and drag the mouse until you have the desired size.
To move the Control, click the edge of it and drag it around the UserForm.
Control Properties
The Properties window is where you find everything that defines a Control. To view it, first select the Control and look to the left side of the VBA window.
If the Properties window doesn’t appear, hit F4 to show it.
There, you can change the name of the Control, which is used to reference it with macros, the text displayed in the Control, the appearance of the displayed text, if the Control is even visible, and much more.
These are the most often used properties for Controls:
(Name) — the name of the Control that you will use in VBA in order to do something with it. For instance, you need to know the name of a TextBox in order to get the user’s input from it.
Caption — the text that will appear in or on the Control. For a button, this is what appears as the button’s text; for a Label, this is the text that appears within the label.
Font — click this section and then the button with the 3 dots that appears and you can control the size and appearance of the text within the Control.
There are many other options that you can change for a Control, and those will be covered in more depth in another tutorial.
Remove the Control
To remove a Control, simply click it and hit the Delete key or Right-click it and select Delete.
You can always hit Ctrl + Z to undo the deletion if you made a mistake.
Common Controls used in UserForms
The most common Controls are the Label, CommandButton, TextBox, and CheckBox.
Here is what they might look like on the UserForm.
In the VBA window in design mode, it looks like this:
List of Controls for UserForms
This is a list of all of the Controls that you can add to a UserForm.
(eventually, each Control will have a link to its own tutorial)
- CheckBox
- ComboBox
- CommandButton
- Frame
- Image
- Label
- ListBox
- MultiPage
- OptionButton
- RefEdit
- ScrollBar
- SpinButton
- TabStrip
- TextBox
- ToggleButton
Notes
Controls are what make a UserForm useful. This tutorial is supposed to serve as an introduction to these Controls. I recommend that you play around with them and see what works best for your situation.
In later tutorials, you will learn how to do things with these controls, such as get data from them and put data into them.
Make sure to download the sample file to see these examples in Excel. However, in this case, the UserForm will not actually do anything; it simply illustrates the display of a few Controls.
Similar Content on TeachExcel
UserForm Controls Events
Tutorial: Explanation of Events for Controls in UserForms in Excel. This includes what they are, how…
Create UserForm Control Templates
Tutorial: How to create a UserForm Controls template that will allow you to quickly add pre-formatte…
UserForm Events
Tutorial: Explanation of UserForm Events in Excel. This includes what they are, how to use them, and…
UserForm Properties List and Explanation
Tutorial: This is a listing of all properties for the UserForm in Excel. Each property includes an e…
Loop Through Controls in a UserForm
Tutorial: How to loop through all controls in a UserForm; this allows you to do things like get valu…
UserForm Control Properties Overview
Tutorial: Overview of Control properties in UserForms; this includes what they are, how to change th…
Subscribe for Weekly Tutorials
BONUS: subscribe now to download our Top Tutorials Ebook!
Чтобы добавить UserForm, нужно сделать то же самое, когда мы добавляем новый модуль:
Если вы не видите окно Свойства ( Properties ), убедитесь, что оно отображено и тогда начните с изменения названия Формы (так, чтобы вы ее легко могли найти позже):
Вид ( UserForm ) имеет свои собственные события, подобно тому, как имеет рабочая книга или лист. Чтобы добавить событие, дважды щелкните по Форме (UserForm).
Теперь давайте создадим два события, чтобы посмотреть как это работает. Первое событие будет определять начальный размер Формы , и второе — увеличивать ее размеры на 50 пикселей, когда пользователь щелкает.
Событие UserForm_Initialize будет срабатывать когда Форма запускается:
Для упрощения кода, мы можем использовать Me вместо названия формы (так как этот код есть в Форме , с которой мы работаем):
Второе событие будет возникать когда пользователь будут кликать по Форме:
Запуск формы (UserForm)
Чтобы запустить Форму в процедуре, используйте Show:
Использование элементов управления форм на листе Excel
Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).
В Microsoft Excel есть несколько элементов управления для листов диалога, которые можно использовать для выбора элементов из списка. Примеры элементов управления: списки, поля со списком, счетчики и полосы прокрутки.
Дополнительные сведения об элементах управления форм в Excel можно найти в статье Общие сведения о формах, элементах управления форм и элементах ActiveX на листе.
Дополнительные сведения
В следующих методах показано, как использовать списки, поля со списком, счетчики и полосы прокрутки. В примерах используется один и тот же список, ссылка на ячейку и функция индекс.
Включение вкладки «Разработчик»
Чтобы использовать элементы управления формы в Excel 2010 и более поздних версиях, необходимо включить вкладку Разработчик. Для этого выполните указанные ниже действия.
Откройте вкладку Файл и выберите команду Параметры.
В левой области выберите пункт настроить ленту .
Установите флажок разработчик в разделе Основные вкладки справа, а затем нажмите кнопку ОК.
Чтобы использовать элементы управления форм в Excel 2007, необходимо включить вкладку разработчик . Для этого выполните указанные ниже действия.
Нажмите кнопку Microsoft Office, а затем — Параметры Excel.
Нажмите популярные, установите флажок Показыватьвкладку «Разработчик» на ленте и нажмите кнопку ОК.
Настройка списка, ссылки на ячейку и предметного указателя
На новом листе введите следующие элементы в диапазоне от H1: H20:
H1: роликовый Скатес
H6: Вашинг Machine
H7: Роккет Launcher
H11: — это очень привлекательные
H18: набор инструментов
H20: жесткий диск
В ячейке a1 введите следующую формулу:
= ИНДЕКС (H1: H20; G1; 0)
Пример окна списка
Чтобы добавить список в Excel 2007 и более поздних версий, откройте вкладку разработчик , нажмите кнопку Вставить в группе элементы управления , а затем в разделе элементы управления формывыберите пункт форма списка (элемент управления) .
Чтобы добавить список в Excel 2003 и более ранних версиях Excel, нажмите кнопку «список» на панели инструментов «формы». Если панель инструментов формы не отображается, в меню Вид выберите пункт панели инструментов, а затем — пункт формы.
Щелкните на листе место, где должен быть расположен левый верхний угол списка, и перетащите его в то место, где должен находиться правый нижний угол поля со списком. В этом примере создайте список, охватывающий ячейки B2: E10.
В группе элементы управления нажмите кнопку свойства.
В окне Формат объекта введите следующие данные, а затем нажмите кнопку ОК.
Чтобы задать диапазон списка, введите H1: H20 в поле диапазон ввода .
Чтобы ввести числовое значение в ячейку G1 (в зависимости от того, какой элемент выбран в списке), введите G1 в поле » связь с ячейкой».
Примечание: Формула INDEX () использует значение в ячейке G1, чтобы вернуть правильный элемент списка.
В разделе тип выделенияубедитесь, что выбран параметр один вариант.
Примечание: Параметры Multi и Extend полезны только в том случае, если вы используете процедуру Microsoft Visual Basic для приложений, чтобы возвращать значения списка. Также обратите внимание на то, что флажок объемной заливки позволяет добавить трехмерный вид в список.
Список элементов должен отображаться в списке. Чтобы использовать список, щелкните любую ячейку, чтобы не выделять список. Если щелкнуть элемент в списке, ячейка G1 будет обновлена числом, указывающим позицию выбранного в списке элемента. Формула INDEX в ячейке a1 использует этот номер для отображения имени элемента.
Пример поля со списком
Чтобы добавить поле со списком в Excel 2007 и более поздних версиях, откройте вкладку разработчик , нажмите кнопку Вставить, а затем в разделе элементы управления формыщелкните поле со списком .
Чтобы добавить поле со списком в Excel 2003 и более ранних версиях Excel, нажмите кнопку раскрывающегося списка на панели инструментов формы.
Щелкните на листе место, где должен быть расположен левый верхний угол поля со списком, а затем перетащите поле со списком в то место, где должен находиться правый нижний угол окна списка. В этом примере создайте поле со списком, которое охватывает ячейки B2: E2.
Щелкните поле со списком правой кнопкой мыши и выберите пункт Формат элемента управления.
Введите указанные ниже данные и нажмите кнопку ОК.
Чтобы задать диапазон списка, введите H1: H20 в поле диапазон ввода .
Чтобы ввести числовое значение в ячейку G1 (в зависимости от того, какой элемент выбран в списке), введите G1 в поле » связь с ячейкой».
Примечание: Формула INDEX использует значение в ячейке G1, чтобы вернуть правильный элемент списка.
В поле строки раскрывающегося списка введите 10. Этот параметр определяет, сколько элементов будет отображаться, прежде чем использовать полосу прокрутки для просмотра остальных элементов.
Примечание: Флажок объемной заливки необязателен. Он добавляет трехмерный вид в раскрывающийся список или поле со списком.
В раскрывающемся списке или поле со списком должен быть отображен список элементов. Чтобы использовать раскрывающийся список или поле со списком, щелкните любую ячейку, чтобы выделить объект. Если щелкнуть элемент в раскрывающемся списке или поле со списком, ячейка G1 будет обновлена числом, указывающим позицию в списке выбранного элемента. Формула INDEX в ячейке a1 использует этот номер для отображения имени элемента.
Пример кнопки «Счетчик»
Чтобы добавить счетчик в Excel 2007 и более поздних версий, откройте вкладку разработчик , нажмите кнопку Вставить, а затем в разделе элементы управления формынажмите кнопку Счетчик .
Чтобы добавить счетчик в Excel 2003 и более ранних версиях Excel, нажмите кнопку «Счетчик» на панели инструментов «формы».
Щелкните на листе место, где должен быть расположен левый верхний угол счетчика, а затем перетащите счетчик в то место, где должен находиться правый нижний угол кнопки счетчика. В этом примере создайте прокрутку кнопки, которая охватывает ячейки B2: B3.
Щелкните правой кнопкой мыши кнопку счетчик и выберите пункт Формат элемента управления.
Введите указанные ниже данные и нажмите кнопку ОК.
В поле Текущее значение введите 1.
Это значение инициализирует счетчик, чтобы формула указателя указывала на первый элемент в списке.
В поле минимальное значение введите 1.
Это значение ограничивает верхнюю часть счетчика на первый элемент в списке.
В поле Максимальное значение введите 20.
Этот номер задает максимальное количество элементов в списке.
В поле Шаг изменения введите 1.
Это значение определяет степень приращения текущего значения с помощью элемента управления «Счетчик».
Чтобы ввести числовое значение в ячейку G1 (в зависимости от того, какой элемент выбран в списке), введите G1 в поле «связь с ячейкой».
Щелкните любую ячейку, чтобы кнопка счетчика не выделена. Если щелкнуть элемент управления вверх или вниз на кнопке счетчик, ячейка G1 будет обновлена числом, которое указывает текущее значение счетчика, а также инкрементное изменение счетчика. Затем этот номер обновляет формулу INDEX в ячейке a1 для отображения следующего или предыдущего элемента.
Значение «Счетчик» не изменится, если текущее значение равно 1, а затем щелкнуть элемент управления вниз или, если текущее значение равно 20, а затем щелкнуть элемент управления вверх.
Пример полосы прокрутки
Чтобы добавить полосу прокрутки в Excel 2007 и более поздних версиях, откройте вкладку разработчик , нажмите кнопку Вставитьи выберите элемент полоса прокрутки в разделе элементы управления формы.
Чтобы добавить полосу прокрутки в Excel 2003 и более ранних версиях Excel, нажмите кнопку «вертикальная полоса прокрутки» на панели инструментов «формы».
Щелкните на листе место, где должен находиться левый верхний угол полосы прокрутки, а затем перетащите полосу прокрутки в то место, где должен находиться правый нижний угол полосы прокрутки. В этом примере создается полоса прокрутки, которая охватывает ячейки B2: B6 в высоту и является примерно одной четвертой ширины столбца.
Щелкните полосу прокрутки правой кнопкой мыши и выберите пункт Формат элемента управления.
Введите указанные ниже данные и нажмите кнопку ОК.
В поле Текущее значение введите 1.
Это значение инициализирует полосу прокрутки таким образом, чтобы формула указателя указывала на первый элемент в списке.
В поле минимальное значение введите 1.
Это значение ограничивает верхнюю часть полосы прокрутки до первого элемента в списке.
В поле Максимальное значение введите 20. Этот номер задает максимальное количество элементов в списке.
В поле Шаг изменения введите 1.
Это значение определяет, сколько чисел элемент управления «полоса прокрутки» увеличит текущее значение.
В диалоговом окне изменение страницы введите 5. Это значение определяет, сколько текущее значение будет изменяться при щелчке внутри полосы прокрутки на любой из сторон бегунка.
Чтобы ввести числовое значение в ячейку G1 (в зависимости от того, какой элемент выбран в списке), введите G1 в поле » связь с ячейкой».
Примечание: Флажок объемной заливки необязателен. Она добавляет трехмерный вид к полосе прокрутки.
Щелкните любую ячейку так, чтобы полоса прокрутки не выделена. Если щелкнуть элемент управления вверх или вниз на полосе прокрутки, ячейка G1 будет обновлена до числа, указывающего текущее значение полосы прокрутки плюс или минус добавочное изменение полосы прокрутки. Этот номер используется в формуле указателя в ячейке a1 для отображения элемента рядом с текущим элементом или перед ним. Вы также можете перетаскивать ползунок прокрутки, чтобы изменить значение или щелкнуть полосу прокрутки на обеих сторонах ползунка, чтобы увеличить его на 5 (значение изменения страницы). Полоса прокрутки не изменится, если текущее значение равно 1, и вы щелкните элемент управления вниз или, если текущее значение равно 20, а затем щелкните элемент управления вверх.
Создаем формы в Excel
Если вам приходилось работать с таблицами из множества колонок, да еще к концу рабочего дня и в условиях дефицита времени, то, наверняка, вы случайно вводили данные в ячейку не той строки, в лучшем случае спохватывались и исправляли ошибку сразу, в худшем — ошибка выплывала позже в самый неподходящий момент. Как защитить себя от подобных ситуаций? Есть очень удобное средство — формы. Их созданию и работе с ними посвящена эта статья.
Начнем с того, что не во всех версиях Excel сразу доступна волшебная кнопка Форма. В этом случае предварительно настройте Параметры (перейти к ним можно на вкладке Файл). Здесь вы также можете сразу не найти то, что нужно добавить на ленту. Поэтому сначала измените вариант в поле Выбрать команды (в данном случае нужен вариант Все команды). Чтобы добавить найденную в списке команду Форма, нужно выбрать имя вкладки, где разместится кнопка и создать новую группу. Теперь щелкните по кнопке Добавить и проверьте, появилась ли новая команда в новой группе.
После этих манипуляций на вкладке Данные появится группа Работа с формами (это название задаете вы, когда создаете группу при настройке параметров Excel), а в ней нужная вам кнопка.
Форму нельзя создать, если шапка таблицы занимает несколько строк — это минус.
Но здесь можно «схитрить»: вставьте после настоящей шапки пустую строку, оформите заголовки строк в одну строку, для этой строки после создания формы установите нулевую высоту (Формат — Размер ячеек —Высота строки — ).
Осталось только щелкнуть на любой ячейке таблицы и на кнопке Форма. Готово, можно работать. Вы видите строку, относящуюся только к одному человеку, причем все названия граф в одной форме. Названия кнопок — настоящие подсказки для пользователя. Нужна новая строка — Добавить, не нужна существующая — Удалить, нужно перейти к какой-либо впереди — Далее, позади — Назад.
Единственной «неочевидной» является кнопка Критерии. Она позволяет включать фильтр, чтобы быстрее находить нужные строки, если их очень много. При задании критерия можно использовать такие знаки, как «*» и «?», критериев может быть несколько (но задать их нужно в пределах одного окна). Для отключения фильтра используйте кнопку Правка.
Выбор поля формы можно делать щелчком мыши или клавишей ТАВ. Добавлять новую строку в таблицу можно с помощью соответствующей кнопки или нажатием ENTER, когда заполнено последнее поле.
Конечно, использовать ли форму или работать с таблицей напрямую, решать вам. Но чтобы выбрать оптимальный способ работы, нужно попробовать разные варианты. Сведения о форме в Excel из этой статьи помогут вам это сделать.
Пользовательская форма в excel
Рисунок 4.1 – Пользовательская форма (пример 4.1) во время работы программы
Рисунок 4.2 – Пользовательская форма (пример 4.1) в режиме редактирования
Чтобы форма имела такой вид, как показано на рисунке 4.2, требуется с помощью меню Properties задать для нее следующие свойства:
форма в целом (UserForm): Name – Sum_proizv (имя формы, используемое для ссылок на нее); Caption – Вычисления (заголовок формы);
надписи: для первой надписи (на рисунке 4.2 – верхняя) указать свойство Caption – Левый верхний. Для другой надписи указать свойство Caption – Правый нижний, для третьей указать Caption – Результат;
текстовые поля: для верхнего поля указать свойство Name – Nach, для следующего – Kon, для третьего – Rez;
раскрывающийся список: Name – Operacii;
кнопка для вычисления результата: Name – Schet, Caption – Вычислить;
кнопка для закрытия формы: Name – Vyhod, Caption – Выход.
Примечание – Некоторые другие свойства элементов формы (например, перечень элементов списка и номер его текущего элемента) будут заданы в программе для работы с формой.
Чтобы приступить к написанию программы для работы с созданной пользовательской формой, требуется после создания формы, приведенной на рисунке 4.2, выбрать команду View – Code. Вызывается редактор VBA, и открывается модуль пользовательской формы. В нем необходимо ввести следующий текст программы (некоторые заголовки подпрограмм будут созданы автоматически):
Private Sub UserForm_Initialize()
Private Sub Schet_Click()
diap = Nach.Value + «:» + Kon.Value
Set d = Range(diap)
If Operacii.ListIndex = 0 Then
Sum = Sum + d.Cells(i, j).Value
If Operacii.ListIndex = 1 Then
proizv = proizv * d.Cells(i, j).Value
Private Sub Vyhod_click()
Процедура UserForm_Initialize() выполняется в начале работы с пользовательской формой, т.е. выполняет ее инициализацию. Оператор Operacii.AddItem «сумма» означает, что к списку Operacii применяется действие (метод) AddItem, т.е. к списку добавляется заданный элемент – слово “сумма”. Затем в список аналогично включается элемент “произведение”. В операторе operacii.ListIndex = 0 свойству ListIndex списка Operacii присваивается значение 0; это означает, что по умолчанию в списке будет выбран первый по порядку элемент, т.е. элемент “сумма” (элементы списка имеют номера, начиная с нуля).
Процедура Schet_Click() выполняется при нажатии кнопки с именем Schet (т.е. кнопки “Вычислить”). В операторе diap = Nach.Value + «:» + Kon.Value составляется символьная строка из значений текстовых полей Nach и Kon, между которыми добавляется двоеточие; таким образом, строка diap будет представлять собой диапазон ячеек, заданный в текстовых полях. Например, если в текстовом поле Nach пользователь введет значение B2, а в текстовом поле Kon – значение F4, то переменная diap будет иметь значение “B2:F4”.
В операторе Set d = Range(diap) переменная d связывается с диапазоном, заданным переменной diap. В двух следующих операторах определяется количество строк и столбцов в заданном диапазоне.
В операторе If Operacii.ListIndex = 0 Then … проверяется, чему равно свойство ListIndex списка Operacii, т.е. какой элемент выбран в списке Operacii. Если выбран элемент с номером 0 (т.е. первый элемент – “сумма”), то выполняется суммирование значений ячеек в заданном диапазоне. Результат вычислений (переменная Sum) присваивается текстовому полю Rez: Rez.Value = Sum.
Аналогично, если выбран элемент списка с номером 1 (“произведение”), то вычисляется произведение ячеек в заданном диапазоне, и результат выводится в текстовое поле Rez.
Процедура Vyhod_click() выполняется при нажатии кнопки с именем Vyhod (т.е. кнопки “Выход”). Оператор Unload Sum_proizv закрывает форму.
Пример 4.2 – Требуется разработать пользовательскую форму (см. рисунок 4.3) для возведения чисел в заданную степень и для извлечения корней заданной степени (или для выполнения обеих этих операций). Для ввода числа, которое требуется возвести в степень (или извлечь из него корень), должно использоваться текстовое поле. Показатель степени (для возведения или извлечения корня) задается с помощью счетчика. Для выбора операции (возведение в степень или извлечение корня) используются флажки. Результаты должны выводиться в текстовые поля. Вычисление должно выполняться по нажатию кнопки, размещенной на пользовательской форме. Кроме того, требуется создать кнопку для закрытия пользовательской формы.
Создание элементов управления и указание их свойств
Пусть требуется создать пользовательскую форму примерно такого вида, как показано на рисунке 4.4. Для этого потребуется задать следующие элементы управления и их свойства (конечно, имена элементов управления могут быть и другими):
форма в целом (UserForm): Name – Stepen_koren (имя формы, используемое для ссылок на нее); Caption – Степени и корни (заголовок формы);
надписи (Label): две надписи со свойствами Caption – Число и Показатель;
текстовые поля (TextBox): четыре текстовых поля со свойствами Name – Osnovanie, Pokazatel, Stepen, Koren (на рисунке 4.4 эти текстовые поля приведены сверху вниз);
счетчик (SpinButton): свойство Name – Pokaz;
флажки (CheckBox): два флажка со свойствами Name – Vozved и Izvlech, Caption — Возведение и Извлечение;
кнопки: кнопка для вычисления результата должна иметь свойства Name – Schet, Caption – Вычислить, а кнопка для закрытия формы — свойства Name – Vyhod, Caption – Выход.
Примечание – Важно понимать, что все связи между элементами управления (например, отображение значения счетчика, вывод результатов операций и т.д.) должны задаваться в программе для работы с формой.
Рисунок 4.3 – Пользовательская форма (пример 4.2) во время работы программы
Рисунок 4.4 – Пользовательская форма (пример 4.2) в режиме редактирования
Программа для работы с формой для данной задачи должна иметь примерно следующий вид:
Private Sub UserForm_Initialize()
Private Sub Pokaz_change()
Private Sub Raschet_click()
If vozved.Value = True Then
If Izvlech.Value = True Then
Private Sub Vyhod_click()
Процедура UserForm_Initialize() выполняется в начале работы с пользовательской формой. Операторы Vozved.Value = True и Izvlech.Value = True означают, что в начале работы с формой оба флажка (Vozved и Izvlech) должны быть установлены.
Процедура Pokaz_change() выполняется при каждом изменении значения счетчика Pokaz. Оператор Pokazatel.Value = Pokaz.Value означает, что значение счетчика Pokaz выводится в текстовое поле Pokazatel (т.е. присваивается его свойству Value). Это необходимо, чтобы видеть на экране значение счетчика (т.е. заданную степень).
Процедура Schet_Click() выполняется при каждом нажатии кнопки с именем Schet (т.е. кнопки “Вычислить”). В операторе x = CSng(Osnovanie.Value) переменной x присваивается значение текстового поля Osnovanie (т.е. число, которое требуется возвести в степень и/или извлечь из него корень); функция CSng преобразует значение этого поля в тип Single (т.е. вещественное число). В операторе y = CInt(Pokazatel.Value) переменной y присваивается значение поля Pokazatel (т.е. показатель степени), преобразованное в тип Integer.
Если выполняется условие vozved.Value = True (т.е. флажок Vozved установлен), то выполняется заданное возведение в степень, и результат выводится в текстовое поле Stepen. Если условие Vozved.Value = True не выполняется (т.е. флажок Vozved сброшен), то текстовое поле Stepen очищается (в него выводится пустая строка).
Аналогично, если установлен переключатель Izvlech, то выполняется извлечение корня заданной степени, и результат выводится в текстовое поле Koren.
Процедура Vyhod_Click(), выполняемая при нажатии кнопки с именем Vyhod, предназначена для закрытия формы. Она аналогична процедуре для этой цели, приведенной в предыдущем примере.
ШКОЛА ПРОГРАММИРОВАНИЯ
Сообщение об ошибке
Создание формы в Excel на VBA (+видео)
Для чего нужны формы в VBA?
Форма это некий контейнер, в котором размещаются различные объекты и элементы управления, из которых создается интерфейс приложения, т.е. проще говоря, форма — это холст, на котором разработчик рисует лицо своей программы. С формами Вы сталкиваетесь постоянно. Например, окно браузера, в котором Вы читаете эту страницу, так же является формой с элементами управления и отображения информации. Характерный набор кнопок для формы это «Свернуть», «Развернуть/Свернуть окно», «Закрыть».
В операционных системах (например Windows, MacOS, Linux) содержатся библиотеки, в которых уже заложены функции построения стандартных форм и объектов управления, что значительно упрощает разработку интерфейса большинства прикладных приложении. Такой подход позволяет сделать приложения универсальными в плане переноса на другие рабочие станции (ПК) и легче т.к. нет необходимости «носить» все библиотеки с собой. Эти функции используются различными средами разработки.
В VBA Excel формы позволяют организовать полноценный интерфейс для взаимодействия с пользователем, конечно, имеется много ограничений и неудобств.
Перейдем теперь к практической части создания и конструирования форм.
Добавляются формы в VBA просто, открываем редактор Visual Basic (Alt+F11), в главном меню редактора Insert – UserForm. После чего должна появиться форма, а в структуре книги (окно View — Project Explorer) появится папка «Forms» в которой содержится UserForm1
Конструируется форма в VBA очень просто, выбираем на панели объектов «Toolbox» (View — Toolbox) нужный объект, например «CommandButton»
переходим на форму, жмем ЛКМ (Левая кнопка мыши) и не отпуска тянем до нужных размеров.
Toolbox (Инструменты) — это панель содержащая необходимые для разработки интерфейса объекты (Кнопки, Метки, полосы прокрутки и т.д.). В панель Toolbox можно добавлять новые объекты, для этого щелкните ПКМ по свободной области панели и выберите из контекста «Additional Controls. «. В открывшемся окне выбираете необходимые компоненты.
Учтите, что наборы компонентов могут отличаться на различных ПК и соответственно, приложения, написанные в Excel, не будут работать или будут работать, но с ошибками. Обратите внимание, если выбрать какой-либо объект, например «Кнопку», то в окне «Properties» (F4), появится список доступных свойств у данного объекта. Это очень удобно, когда необходимо ввести, например метку, поменять цвет или задать более точный размер и т.д. Поэкспериментируйте с созданием/изменением объектов и самой формой.
Как показать (запустить) форму на VBA?
После того как форма была создана, ее необходимо при запуске макроса открыть. Как это сделать?
Все очень просто. Создайте в книге модуль (как это сделать, описано в этой статье) следующего содержания:
Sub ЗапускФормы()
UserForm1.show
End Sub
Запускаете макрос «ЗапускФормы».
Команда UserForm1.show — дословно UserForm1.Показать, где UserForm1 это имя нашей формы установленное в поле Name. Show(Показать) — метод формы. Для скрытия форм используется метод Hide (Скрыть).
На этом все. Ниже, Вы можете посмотреть видео демонстрирующее все вышеописанное.
Прикрепленный файл: form_vba.zip
Видео: Создание форм в Excel на VBA
By using forms and the many controls and objects that you can add to them, you can make data entry on your worksheets easier and improve the way your worksheets look. You can also do this yourself with little or no need for Microsoft Visual Basic for Applications (VBA) code.
A worksheet form is not the same thing as an Excel template. A template is a pre-formatted file that can get you started creating a workbook that looks the way you want. A form contains controls, such as boxes or dropdown lists, that can make it easier for people who use your worksheet to enter or edit data. To find out more about templates you can download, see Excel templates.
What is a form?
A form, whether printed or online, is a document designed with a standard structure and format that makes it easier to capture, organize, and edit information.
-
Printed forms contain instructions, formatting, labels, and blank spaces for writing or typing data. You can use Excel and Excel templates to create printed forms.
-
Online forms contain the same features as printed forms. In addition, online forms contain controls. Controls are objects that display data or make it easier for users to enter or edit data, perform an action, or make a selection. In general, controls make the form easier to use. Examples of common controls include list boxes, option buttons, and command buttons. Controls can also run assigned macros and respond to events, such as mouse clicks, by running Visual Basic for Applications (VBA) code.
You can use Excel in several ways to create printed and online forms.
Types of Excel forms
There are several types of forms that you can create in Excel: data forms, worksheets that contain Form and ActiveX controls, and VBA UserForms. You can use each type of form by itself, or you can combine them in different ways to create a solution that’s right for you.
Data form
A data form provides a convenient way to enter or display one complete row of information in a range or table without scrolling horizontally. You may find that using a data form can make data entry easier than moving from column to column when you have more columns of data than can be viewed on the screen. Use a data form when a simple form of text boxes that list the column headings as labels is sufficient and you don’t need sophisticated or custom form features, such as a list box or spin button.
Excel can automatically generate a built-in data form for your range or table. The data form displays all column headers as labels in a single dialog box. Each label has an adjacent blank text box in which you can enter data for each column, up to a maximum of 32 columns. In a data form, you can enter new rows, find rows by navigating, or (based on cell contents) update rows and delete rows . If a cell contains a formula, the formula result is displayed in the data form, but you cannot change the formula by using the data form.
Worksheet with Form and ActiveX controls
A worksheet is a type of form that enables you to enter and view data on the grid, and there are several control-like features already built-in to Excel worksheets, such as comments and data validation. Cells resemble text boxes in that you can enter and format them in a variety of ways. Cells are often used as labels, and by adjusting cell height and width and merging cells, you can make a worksheet behave like a simple data entry form. Other control-like features, such as cell comments, hyperlinks, background images, data validation, conditional formatting, embedded charts, and AutoFilter can make a worksheet behave like an advanced form.
For added flexibility, you can add controls and other drawing objects to the drawing canvas of a worksheet, and combine and coordinate them with worksheet cells. For example, you can use a list box control to make it easier for a user to select from a list of items. Or, you can use a spin button control to make it easier for a user to enter a number.
Because controls and objects are stored on the drawing canvas, you can display or view controls and objects alongside associated text that is independent of row and column boundaries without changing the layout of a grid or table of data on your worksheet. Most of the time, many of these controls can also be linked to cells on the worksheet and do not require VBA code to make them work. You can set properties that determine whether a control floats freely or moves and resizes together with a cell. For example, you might have a check box that you want to move together with its underlying cell when the range is sorted. However, if you have a list box that you want to keep in a specific location at all times, you probably do not want it to move together with its underlying cell.
Excel has two types of controls: Form controls and ActiveX Controls. In addition to these sets of controls, you can also add objects from the Drawing tools, such as a AutoShapes, WordArt, SmartArt graphic, or text boxes.
The following sections describe these controls and drawing objects, and also explain how to work with these controls and objects in more detail.
Form controls
Form controls are the original controls that are compatible with earlier versions of Excel, starting with Excel version 5.0. Form controls are also designed for use on XLM macro sheets.
You use Form controls when you want to easily reference and interact with cell data without using VBA code, and when you want to add controls to chart sheets. For example, after you add a list box control to a worksheet and linking it to a cell, you can return a numeric value for the current position of the selected item in the control. You can then use that numeric value in conjunction with the INDEX function to select different items from the list.
You can also run macros by using Form controls. You can attach an existing macro to a control, or write or record a new macro. When a user of the form clicks the control, the control runs the macro.
However, these controls cannot be added to UserForms, used to control events, or modified to run Web scripts on Web pages.
Summary of form controls
Button Name |
Example |
Description |
|
---|---|---|---|
|
Label |
|
Identifies the purpose of a cell or text box, or displays descriptive text (such as titles, captions, pictures) or brief instructions. |
|
Group box |
|
Groups related controls into one visual unit in a rectangle with an optional label. Typically, option buttons, check boxes, or closely related contents are grouped. |
|
Button |
|
Runs a macro that performs an action when a user clicks it. A button is also referred to as a push button. |
|
Check box |
|
Turns on or off a value that indicates an opposite and unambiguous choice. You can select more than one check box on a worksheet or in a group box. A check box can have one of three states: selected (turned on), cleared (turned off), and mixed, meaning a combination of on and off states (as in a multiple selection). |
|
Option button |
|
Allows a single choice within a limited set of mutually exclusive choices; an option button is usually contained in a group box or a frame. An option button can have one of three states: selected (turned on), cleared (turned off), and mixed, meaning a combination of on and off states (as in a multiple selection). An option button is also referred to as a radio button. |
|
List box |
|
Displays a list of one or more items of text from which a user can choose. Use a list box for displaying large numbers of choices that vary in number or content. There are three types of list boxes:
|
|
Combo box |
|
Combines a text box with a list box to create a drop-down list box. A combo box is more compact than a list box but requires the user to click the down arrow to display the list of items. Use a combo box to enable a user to either type an entry or choose only one item from the list. The control displays the current value in the text box, regardless of how that value is entered. |
|
Scroll bar |
|
Scrolls through a range of values when you click the scroll arrows or drag the scroll box. In addition, you can move through a page (a preset interval) of values by clicking the area between the scroll box and either of the scroll arrows. Typically, a user can also type a text value directly into an associated cell or text box. |
|
Spin button |
|
Increases or decreases a value, such as a number increment, time, or date. To increase the value, click the up arrow; to decrease the value, click the down arrow. Typically, a user can also type a text value directly into an associated cell or text box. |
Note: The following controls are unavailable in Office Excel 2007 workbooks. These controls can be used in Excel version 5.0 dialog sheets only.
Button Name |
---|
|
|
|
|
ActiveX controls
ActiveX controls can be used on worksheet forms, with or without the use of VBA code, and on VBA UserForms. In general, use ActiveX controls when you need more flexible design requirements than those provided by Form controls. ActiveX controls have extensive properties that you can use to customize their appearance, behavior, fonts, and other characteristics.
You can also control different events that occur when an ActiveX control is interacted with. For example, you can perform different actions, depending on which choice a user selects from a list box control, or you can query a database to refill a combo box with items when a user clicks a button. You can also write macros that respond to events associated with ActiveX controls. When a user of the form interacts with the control, your VBA code then runs to process any events that occur for that control.
Your computer also contains many ActiveX controls that were installed by Excel and other programs, such as Calendar Control 12.0 and Windows Media Player.
Important: Not all ActiveX controls can be used directly on worksheets; some can be used only on Visual Basic for Applications (VBA) UserForms. If you try to add any one of these particular ActiveX controls to a worksheet, Excel displays the message «Cannot insert object.»
However, ActiveX controls cannot be added to chart sheets from the user interface or to XLM macro sheets. You also cannot assign a macro to run directly from an ActiveX control the same way you can from a Form control.
Summary of ActiveX controls
Button Name |
Example |
Description |
|
---|---|---|---|
|
Check box |
|
Turns on or off a value that indicates an opposite and unambiguous choice. You can select more than one check box at a time on a worksheet or in a group box. A check box can have one of three states: selected (turned on), cleared (turned off), and mixed, meaning a combination of on and off states (as in a multiple selection). |
|
Text box |
|
Enables you to, in a rectangular box, view, type, or edit text or data that is bound to a cell. A text box can also be a static text field that presents read-only information. |
|
Command button |
|
Runs a macro that performs an action when a user clicks it. A command button is also referred to as a push button. |
|
Option button |
|
Allows a single choice within a limited set of mutually exclusive choices usually contained in a group box or frame. An option button can have one of three states: selected (turned on), cleared (turned off), and mixed, meaning a combination of on and off states (as in a multiple selection). An option button is also referred to as a radio button. |
|
List box |
|
Displays a list of one or more items of text from which a user can choose. Use a list box for displaying large numbers of choices that vary in number or content. There are three types of list boxes:
|
|
Combo box |
|
Combines a text box with a list box to create a drop-down list box. A combo box is more compact than a list box, but requires the user to click the down arrow to display the list of items. Use to allow a user to either type an entry or choose only one item from the list. The control displays the current value in the text box, regardless of how that value is entered. |
|
Toggle button |
|
Indicates a state, such as Yes/No, or a mode, such as On/Off. The button alternates between an enabled and disabled state when it is clicked. |
|
Spin button |
|
Increases or decreases a value, such as a number increment, time, or date. To increase the value, click the up arrow; to decrease the value, click the down arrow. Typically, a user can also type a text value into an associated cell or text box. |
|
Scroll bar |
|
Scrolls through a range of values when you click the scroll arrows or drag the scroll box. In addition, you can move through a page (a preset interval) of values by clicking the area between the scroll box and either of the scroll arrows. Typically, a user can also type a text value directly into an associated cell or text box. |
|
Label |
|
Identifies the purpose of a cell or text box, displays descriptive text (such as titles, captions, pictures), or provides brief instructions. |
|
Image |
|
Embeds a picture, such as a bitmap, JPEG, or GIF. |
Frame control |
|
A rectangular object with an optional label that groups related controls into one visual unit. Typically, option buttons, check boxes, or closely related contents are grouped in a frame control. Note: The ActiveX frame control is not available in the ActiveX Controls section of the Insert command. However, you can add the control from the More Controls dialog box by selecting Microsoft Forms 2.0 Frame. |
|
|
More Controls |
Displays a list of additional ActiveX controls available on your computer that you can add to a custom form, such as Calendar Control 12.0 and Windows Media Player. You can also register a custom control in this dialog box. |
Drawing Tool objects
You may also want to include SmartArt graphics, Shapes, WordArt, and text boxes on your form. You can resize, rotate, flip, color, and combine these objects to create even more complex shapes. When you type text directly in a Shape or text box object, the text becomes part of that object — if you rotate or flip the object, the text rotates or flips with it. Unlike ActiveX controls, you can assign different attributes, such as font size and font style, to individual words and characters in the object. You can also assign macros and add hyperlinks to these objects. You can even link text in a Shape or text box object to a worksheet cell and dynamically display updated values in those objects.
Working with controls and objects on the worksheet form
After adding forms and ActiveX to a worksheet form, you usually want to fine-tune and rearrange the controls in a variety of ways to create a well-designed, user friendly form. Common tasks include the following:
-
Controlling the display of gridlines while you work with the controls, and deciding whether to display the gridlines to the user on the final worksheet form.
-
Selecting and deselecting controls so that you can specify properties or make additional adjustments.
-
Editing text in a control, such as the caption or label.
-
Grouping, copying, moving, and aligning controls to organize the layout of the worksheet form.
-
Resizing and formatting controls to obtain the appearance that you want.
-
Positioning or sizing a control with a cell.
-
Protecting controls and linked cells according to your specific data protection needs.
-
Enabling or disabling the printing of controls when the worksheet form is printed.
-
Deleting unused controls.
You can design a worksheet form with or without cell gridlines in the background. For example, you might want to turn off cell gridlines and then format all the cells with the same color or pattern, or even use a picture as a sheet background. To hide or show the gridlines, on the View tab, in the Show/Hide group, clear or select the Gridlines check box.
Determining the type of control that is on your worksheet
Because there are three different types of controls and objects that you can modify uniquely, you might not know for sure which type of control it is just by looking at it. To determine the type of control (Form or ActiveX), select and right-click the control, and then display the shortcut menu:
-
If the shortcut menu contains the command Properties, the control is an ActiveX control, and you are in design mode.
-
If the shortcut menu contains the command Assign Macro, the control is a Form control.
Tip: To display the correct shortcut menu for the group box Form control, make sure that you select the perimeter instead of the interior of the group box.
-
If the shortcut menu contains the command Edit Text, the object is a Drawing object.
VBA UserForms
For maximum flexibility, you can create UserForms, which are custom dialog boxes, that usually include one or more ActiveX controls. You make UserForms available from VBA code that you create in the Visual Basic Editor. The high-level steps for creating a UserForm are as follows:
-
Insert a UserForm into your workbook’s VBAProject. You access a workbook’s VBAProject by first displaying the Visual Basic Editor (press ALT+F11) and then, on the Insert menu, clicking UserForm.
-
Write a procedure to display the UserForm.
-
Add ActiveX controls.
-
Modify properties for the ActiveX controls.
-
Write event-handler procedures for the ActiveX controls.
By using UserForms, you can also utilize advanced form functionality,. For example, you can programmatically add a separate option button for each letter of the alphabet or you can add a check box for each item in a large list of dates and numbers.
Before creating a UserForm, consider using built-in dialog boxes available from Excel that might fit your needs. These built-in dialog boxes include the VBA InputBox and MsgBox functions, the Excel InputBox method, GetOpenFilename method, GetSaveAsFilename method, and the Dialogs object of the Application object, which contains all the built-in Excel dialog boxes.
For more information, explore the Microsoft Office Excel Developer Center.
Top of Page