![](/user_photo/2706_HbeT2.jpg)
- •Введение
- •Лабораторная работа №1 Знакомство с Visual Basic for Applications
- •Лабораторная работа №2 Создание первой программы в vba
- •Объявление переменных
- •Лабораторная работа №3 Построение алгоритма ветвления. Конструкция If _ Then _ Else
- •Лабораторная работа №5 Организация циклов Операторы for…next и while…wend
- •Цикл For...Next
- •Оператор Do While...Loop
- •Оператор Do Until...Loop
- •Рабочее задание (по вариантам):
- •Информация для выполнения заданий
- •Лабораторная работа № 6 Создание пользовательской формы
Информация для выполнения заданий
-
Возведение в степень (^) Пример: I = 2 ^ 2 ' Возвращает 4
-
Квадратный корень Sqr Пример: I = Sqr(4)
-
Изменение знака (–)
-
Целое деление (\) Пример: I = 11 \ 4 ' Возвращает 2.
-
Деление по модулю (Mod) Пример: I = 19 Mod 6 ' Остаток 1
-
Слияние строк (&)
Для закраски фона ячейки Excel используйте операторы Interior (фон) и ColorIndex (цвет).
Range("A1").Offset(Row, 0).Interior.ColorIndex = 3
Число 3 соответствует красному цвету.
Лабораторная работа № 6 Создание пользовательской формы
Цель работы: приобретение навыка создания пользовательской формы и программы в модуле формы, ознакомление с приемами использования элементов управления.
При помощи форм и элементов управления можно создавать диалоговые окна произвольной конфигурации. Элементы управления группируются в панели инструментов Тооlbox редактора VBA.
Задание: Создать пользовательскую форму для регистрации клиентов туристической фирмы “Будьте Здоровы”.
Выполнение:
1. Откройте свою книгу и вставьте новый лист. Дайте листу название “БудьтеЗдоровы”.
2. В первую строку, начиная с ячейки А1, введите названия граф:
Поз. |
Фамилия |
Имя |
Отчество |
Пол |
Тур |
Срок |
Отформатируйте «шапку» таблицы: названия граф – по центрам ячеек, шрифт полужирный, заливка и обрамление – по собственному усмотрению.
3. Перейдите в окно VBA и вставьте модуль форм: Insert\UserForm. На экране появится шаблон формы (форма в режиме Конструктора), а также панель инструментов «Элементы управления» (Toolbox) и окно свойств (Properties).
Рис 1.
4. В окне Properties замените имя (Name) UserForm1 на frmБудьтеЗдоровы (окончание ввода имени обозначается нажатием на клавишу Enter или щелчком мыши где-нибудь за пределами введённого имени).
5. Расположите полотно формы на экране поудобнее, раздвиньте за маркеры выделения до размеров приблизительно 1210 см, расположите в удобном месте Toolbox и заполните полотно формы элементами управления в соответствии с рис. 1. В настоящий момент не имеют значения точные размеры и координаты элементов, они потом будут определены программно.
Сейчас важно не пропустить тот или иной элемент управления. Заполняя полотно формы, не забывайте, что редактор VBA поддерживает метод “Перенести и оставить” (Drag & Drop), который при нажатой клавише Ctrl копирует выделенный фрагмент в новое место.
6. Используя окно Properties (оно вызывается нажатием клавиши F4), дайте элементам управления имена в соответствии с рис. 2 в поле Name каждого элемента, а не на форме. Обратите внимание, что имена элементам управления здесь даются в соответствии с венгерской нотацией1, в соответствии с которой имя объекта снабжается префиксом, обозначающим класс объекта. Выбирать элемент управления можно из полотна формы, щёлкнув по нему мышкой, или непосредственно в окне Properties из выпадающего списка.
Рис 2.
7. Следующая часть работы – написание программы UserForm_Initialize (программа 1). Не отчаивайтесь, глядя на длинный текст: добрую половину работы за Вас сделает редактор VBA с помощью своих подсказок, значительную часть оставшейся работы поможет выполнить метод Drag & Drop.
Первая программа UserForm_Initialize задает свойства элементов вашей пользовательской формы. Ее можно набрать целиком или сначала свойства можно непосредственно ввести в окне Properties для каждого элемента, а текст первой программы тогда будет выглядеть:
Private Sub UserForm_Initialize()
With cboTur.List = Array("Голубые озёра", "Золотые пески", _
"Белые кружева", "Телецкое озеро", "Крымский каньон", "Янтарный берег")
.ListIndex = 0
End With
End Sub
Итак, выполните двойной щелчок по свободной части полотна формы и вы попадете в окно кода (текста программы), где сразу замените слово Click на Initialize. Затем набирайте остальные строки программы. Внимательно следите за текстом, подсказками на экране, при всякой возможности используйте Drag & Drop.
8. Проверьте полученную форму. Для этого нужно выполнить программу UserForm_Initialize. Чтобы запустить ее на выполнение, дайте команду Run | Run Sub/UserForm, которая дублируется клавишей F5 и кнопкой Run Sub/UserForm на панели инструментов.
Закройте окно формы, щёлкнув по системной кнопке закрытия окна в правом верхнем углу формы. Вы окажетесь в модуле текста программы формы – окне кода.
9. На завершающем этапе требуется создать несколько небольших подпрограмм.
Сначала освойте переход из окна конструктора форм в окно кода и обратно.
Переход из окна кода в режим конструктора форм: двойной щелчок по имени формы в окне Project Explorer.
Переход из окна конструктора форм в окно кода: щелчок по кнопке View Code на панели инструментов Project Explorer, команда View | View Code в главном меню редактора VBA или нажатие на клавишу F7.
10. Перейдите в окно конструктора форм и сделайте двойной щелчок по кнопке cmdCancel. Вы окажетесь в окне кода программы 2 cmdCancel_Click. Наберите текст программы (не забывайте о подсказках редактора и о методе Drag & Drop).
11. Перейдите в окно конструктора форм и сделайте двойной щелчок по кнопке cmdExit. Наберите текст программы 3.
12. Перейдите в окно конструктора форм и сделайте двойной щелчок по кнопке cmdOK. Наберите текст программы 4.
13. Перейдите в окно конструктора форм и сделайте двойной щелчок по счетчику spnSrok. Наберите текст программы 5.
14. Перейдите в окно конструктора форм и сделайте двойной щелчок по текстовому полю txtSrok. Наберите текст программы 6.
15. Нажмите клавишу F5 (или щёлкните по кнопке Run Sub/UserForm) и опробуйте действие элементов формы. Заполните все текстовые поля и щёлкните по кнопке ОК.
Перейдите в окно приложения на лист “БудьтеЗдоровы” и посмотрите, добавилась ли там ваша запись.
16. Перейдите на лист «Будьте Здоровы» и в ячейку H1 вставьте элемент управления кнопка. Дайте ей название «Регистрация» и введите для нее текст программы 7. Опробуйте ее работу.
17. Закройте книгу, сохраните изменения.
Программы
Private Sub UserForm_Initialize() 'Инициализация формы frmБудьтеЗдоровы
'Задание заголовка, размеров и цвета формы
With frmБудьтеЗдоровы
.Caption = "Регистрация туристов фирмы <Будьте здоровы!>"
.BackColor = RGB(0, 255, 255)
.Height = 200
.Width = 300
End With
'Задание свойств надписей и текстовых полей
With lblFam
.Caption = "Фамилия:"
.Top = 20
.Left = 10
.Height = 18
.Width = 50
.BackColor = RGB(0, 255, 255)
End With
'
With txtFam
.Top = 20
.Left = 65
.Height = 18
.Width = 80
End With
'
With lblImja
.Caption = "Имя:"
.Top = 40
.Left = 10
.Height = 18
.Width = 50
.BackColor = RGB(0, 255, 255)
End With
'
With txtImja
.Top = 40
.Left = 65
.Height = 18
.Width = 80
End With
'
With lblOtch
.Caption = "Отчество:"
.Top = 60
.Left = 10
.Height = 18
.Width = 50
.BackColor = RGB(0, 255, 255)
End With
'
With txtOtch
.Top = 60
.Left = 65
.Height = 18
.Width = 80
End With
'
With lblTur
.Caption = "Направление тура:"
.Top = 20
.Left = 170
.Height = 18
.Width = 80
.BackColor = RGB(0, 255, 255)
End With
'
With cboTur
.Top = 40
.Left = 170
.Height = 20
.Width = 90
.List = Array("Голубые озёра", "Золотые пески", "Белые кружева", "Телецкое озеро", _
"Крымский каньон", "Янтарный берег")
.ListIndex = 0
End With
'
With fraPol
.Top = 90
.Left = 25
.Caption = "Пол"
.Height = 30
.Width = 120
.BackColor = RGB(0, 255, 255)
End With
'
With optM
.Caption = "муж"
.BackColor = RGB(0, 255, 255)
.Left = 6
.Width = 40
End With
'
With optF
.Caption = "жен"
.BackColor = RGB(0, 255, 255)
.Left = 70
.Width = 40
End With
'
With lblSrok
.Caption = "Продолжительность тура:"
.BackColor = RGB(0, 255, 255)
.Left = 170
.Top = 80
.Height = 18
.Width = 110
End With
'
With txtSrok
.BackColor = RGB(0, 255, 255)
.Left = 170
.Top = 98
.Height = 20
.Width = 40
End With
'
With spnSrok
.Left = 215
.Top = 98
.Height = 20
.Width = 20
.BackColor = RGB(255, 255, 255)
.Orientation = fmOrientationVertical
End With
'Задание свойств командных кнопок
With cmdOK
.Caption = "OK"
.Left = 80
.Top = 140
.Height = 20
.Width = 50
.Default = True
End With
'
With cmdCancel
.Caption = "Отмена"
.Left = 150
.Top = 140
.Height = 20
.Width = 50
End With
'
With cmdExit
.Caption = "Выход"
.Left = 220
.Top = 140
.Height = 20
.Width = 50
End With
End Sub 'end of UserForm_Initialize
''*********************************************
Private Sub cmdCancel_Click()
With frmБудьтеЗдоровы
.txtFam = ""
.txtImja = ""
.txtOtch = ""
.txtSrok = 0
End With
End Sub
'*********************************************
Private Sub cmdExit_Click()
frmБудьтеЗдоровы.Hide
Application.Caption = Empty
End Sub
'*********************************************
'Считывание данных из текстовых полей формы и запись их на рабочий лист
Private Sub cmdOK_Click()
Dim Fam As String
Dim Imja As String
Dim Otch As String
Dim Pol As String * 3
Dim Tur As String
Dim Srok As String * 3
Dim NumRow As Integer
''Считывание данных из текстовых полей формы в локальные переменные
Fam = txtFam.Text
Imja = txtImja.Text
Otch = txtOtch.Text
If optM Then Pol = "муж" Else Pol = "жен"
Tur = cboTur.Text
Srok = txtSrok.Text
'Вывод данных на рабочий лист "БудьтеЗдоровы"
Worksheets("БудьтеЗдоровы").Select
'Первая свободная строка на листе '"БудьтеЗдоровы"
NumRow = ActiveSheet.UsedRange.Rows.Count + 1
'Вывод данных в ячейки
Cells(NumRow, 1).Value = NumRow - 1
Cells(NumRow, 2).Value = Fam
Cells(NumRow, 3).Value = Imja
Cells(NumRow, 4).Value = Otch
Cells(NumRow, 5).Value = Pol
Cells(NumRow, 6).Value = Tur
Cells(NumRow, 7).Value = Srok
'Очистка полей
txtFam.Text = ""
txtImja.Text = ""
txtOtch.Text = ""
Srok = 1
End Sub
''*********************************************
-
'
Private Sub spnSrok_Change()
'Ввод значения счетчика в текстовое поле
With frmБудьтеЗдоровы
.txtSrok.Text = CStr(.spnSrok.Value)
End With
End Sub
''*********************************************
-
'
Private Sub txtSrok_Change()
'Установка значения счетчика в поле ввода
With frmБудьтеЗдоровы
.spnSrok.Value = CInt(.txtSrok.Text)
End With
End Sub
'*********************************************
Sub Регистрация()
'Запускается щелчком по кнопке “Регистрация” ' на панели инструментов
frmБудьтеЗдоровы.Show
End Sub '
1 Соглашения о префиксах имён предложены Реддиком и стали общепринятыми для целей именования переменных и объектов в программах пользователя.