VBA (Стеценко) / VBA_ЛБ_13v2
.pdfСтеценко А. А. |
61 |
.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
62 Программирование в среде электронных таблиц Microsoft Excel
.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)
.Top = 3
.Left = 6
.Width = 40 End With
With optF
.Caption = "жен"
.BackColor = RGB(0, 255, 255)
.Top = 3
.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
Стеценко А. А. |
63 |
.Left = 170
.Top = 98
.Height = 20
.Width = 40 End With
With spnSrok
.Left = 215
.Top = 98
.Height = 20
.Width = 20
.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 |
Р6. Проверьте полученную форму. Для этого запустите на выполнение про-
грамму UserForm_Initialize. Дайте команду Run|Run Sub/ UserForm, кото-
рая дублируется клавишей F5 и кнопкой Run Sub/ UserForm на панели инструментов.
Р7. Закройте окно формы, щёлкнув по системной кнопке закрытия окна в правом верхнем углу формы. Вы окажетесь в модуле текста программы формы – окне кода. На завершающем этапе требуется создать несколько небольших подпрограмм реакций на события. Можно взять тексты и, не мудрствуя лукаво, потренироваться в использовании клавиатуры, но лучше освоить встро-
64 |
Программирование в среде электронных таблиц Microsoft Excel |
енные средства автоматизации. Сначала освойте переход из окна конструктора форм в окно кода и обратно.
Переход из окна конструктора форм в окно кода: щелчок по кнопке
View Code на панели инструментов Project Explorer, команда View | View Code в главном меню редактора VBA или нажатие на клавишу F7.
Переход из окна кода в режим конструктора форм: щелчок по кнопке
View Object на панели инструментов Project Explorer, двойной щелчок по имени формы в окне Project Explorer или нажатие комбинации клавиш
Shift + F7.
Р8. Перейдите в окно конструктора форм и сделайте двойной щелчок по кнопке cmdCancel. Вы окажетесь в окне кода программы cmdCancel_Click. Наберите тело программы cmdCancel_Click (листинг 29) (не забывайте о подсказках редактора и о методе Drag & Drop).
Листинг 29
Private Sub cmdCancel_Click() txtFam = ""
txtImja = "" txtOtch = "" spnSrok = 0 optF = False optM = False
End Sub
Р9. Перейдите в окно конструктора форм и сделайте двойной щелчок по кнопке cmdExit. Наберите текст программы cmdExit_Click (листинг 30).
Листинг 30
Private Sub cmdExit_Click() frmБудьтеЗдоровы.Hide Application.Caption = Empty
End Sub
Р10. Перейдите в окно конструктора форм и сделайте двойной щелчок по кнопке cmdOK. Наберите текст программы cmdOK_Click (листинг 31).
Листинг 31
Private Sub cmdOK_Click()
Dim Pol As String * 3
Dim FirstFree As Long
Dim theTitle As String
'Проверка заполненности полей ввода theTitle = "Регистрация"
'Проверка поля фамилии
If Trim(txtFam.Text) = "" Then
MsgBox prompt:="Заполните поле Фамилия:", _ Buttons:= vbExclamation, Title:=theTitle
txtFam.SetFocus
Стеценко А. А. |
65 |
Exit Sub End If
'Проверка выбора пола
If (Not optM) And (Not optF) Then MsgBox prompt:="Выберите пол", _
Buttons:= vbExclamation, Title:=theTitle optF.SetFocus
Exit Sub End If
'Проверка продолжительности тура
If spnSrok < 1 Then
MsgBox prompt:="Продолжительность тура =?", _ Buttons:= vbExclamation, Title:=theTitle
spnSrok.SetFocus Exit Sub
End If
'Вывод данных на рабочий лист
Worksheets("БудьтеЗдоровы").Select
FirstFree = Range("b65535").End(xlUp).Row + 1 Cells(FirstFree, 1) = FirstFree - 1 Cells(FirstFree, 2) = txtFam.Text Cells(FirstFree, 3) = txtImja.Text Cells(FirstFree, 4) = txtOtch.Text
If optM Then Pol = "муж" Else Pol = "жен" Cells(FirstFree, 5) = Pol Cells(FirstFree, 6) = cboTur.Text Cells(FirstFree, 7) = spnSrok
'Очистка полей ввода txtFam.Text = "" txtImja.Text = "" txtOtch.Text = "" spnSrok.Value = 0 optF.Value = False optM.Value = False
End Sub
Р11. Перейдите в окно конструктора форм и сделайте двойной щелчок по счетчику spnSrok. Наберите текст программы spnSrok_Change (листинг 32).
Листинг 32
Private Sub spnSrok_Change()
'Ввод значения счетчика в текстовое поле txtSrok txtSrok.Text = CStr(.spnSrok.Value)
End Sub
Р12. Перейдите в окно конструктора форм и сделайте двойной щелчок по текстовому полю txtSrok. Наберите текст программы txtSrok_Change (листинг 33).
66 Программирование в среде электронных таблиц Microsoft Excel
Листинг 33
Private Sub txtSrok_Change()
'Установка значения счетчика в поле ввода spnSrok.Value = CInt(.txtSrok.Text)
End Sub
Р13. Нажмите клавишу F5 (или щёлкните по кнопке Run Sub/UserForm) и опробуйте действие элементов формы. Заполните все текстовые поля и
щёлкните по кнопке ОК.
Р14. Перейдите в окно приложения на лист БудьтеЗдоровы и посмотрите, добавилась ли там Ваша запись.
Р15. Закройте книгу, сохраните изменения.
Контрольные вопросы к работе VBA10
К1. Объясните назначение пользовательских форм.
К2. Объясните, почему пользовательскую форму называют также диалоговым окном пользователя?
К3. Как вставить пользовательскую форму в проект VBA? К4. Как присвоить имя пользовательской форме?
К5. Какие Вы знаете элементы управления, которые могут быть включены в пользовательскую форму?
К6. Как вставить элемент управления в пользовательскую форму? К7. Как выделить группу элементов управления в форме?
К8. При добавлении объекта в состав проекта ему сразу присваивается соответствующее стандартное имя с очередным порядковым номером. С какой целью производится переименование объектов?
К9. В чём состоит венгерская нотация?
К10. По каким правилам присваиваются имена объектам в пользовательской форме?
К11. Как получить на экране форму в режиме конструктора? К12. Как получить на экране форму в нормальном виде? К13. Как получить на экране окно редактора кода формы?
К14. Как перейти из окна редактора кода формы в окно конструктора форм? К15. Для чего предназначена программа UserForm_Initialize? Можно ли дать
этой подпрограмме другое имя?
К16. Как запустить на выполнение программу UserForm_Initialize?
К17. Какое назначение имеет свойство Caption? Приведите примеры использования этого свойства.
К18. Объясните назначение свойств Top, Left, Height, Width.
К19. Объясните назначение свойства BackColor и способы задания значения этому свойству.
К20. Для какой цели предназначена функция RGB?
К21. Какую функциональную роль играют командные кнопки?
Стеценко А. А. |
67 |
К22. Для чего предназначен элемент управления Переключатель (OptionButton)? Приведите пример из своей формы.
К23. Объясните последовательность действий написания программы реакции на нажатие кнопки.
К24. Объясните назначение и действие инструкции
FirstFree = ActiveSheet.Range("b65355").End(xlUp).Row + 1
К25. Объясните назначение методов Show и Hide.
К26. Объясните назначение программы spnSrok_Change. Как она запускается? К27. Для чего используется функция CStr в программе spnSrok_Change?
К28. Объясните назначение программы txtSrok_Change. Как она запускается? К29. Для чего используется функция CInt в программе txtSrok_Change?
К30. Какие проверки имеются в программе cmdOK_Click? Для чего они нужны?
Работа VBA11. Создание интерфейса с программой
Цель работы: ознакомление с приёмами запуска программы пользователя.
Рабочее задание. Разработать и опробовать инструменты для запуска пользовательской формы frmБудьтеЗдоровы
Введение
Программа, разработанная в предыдущей работе, создаёт диалоговое окно для ведения учётных операций. Предполагаемый конечный пользователь этой программы – персонал турфирмы, который не обязательно обучен основам программирования. Если разработчика может устроить запуск программы из среды VBA, то для конечного пользователя требуется более удобный интерфейс. Например:
а) программа автоматически запускается при открытии книги Excel;
б) программа запускается щелчком по какой-нибудь кнопке или картинке.
ВExcel 2003 и более ранних версий не было проблем добавить кнопку с любым рисунком на одну из панелей инструментов. В Excel 2007 и более поздних версий можно добавить кнопку на панель быстрого доступа, имеется таже возможность вставить кнопку на оду из вкладок ленты, но это выполняется не средствами Excel.
Влюбой версии Excel можно поставить кнопку или другой элемент управления на рабочий лист. Роль элемента управления может выполнить картинка, рисунок или объект WordArt. Схема программных действий в этом случае получается следующая. Программа обработки события, например, щелчка по объекту, размещается в модуле листа. В программе достаточно поместить всего одну инструкцию, которая инициализирует форму:
frmБудьтеЗдоровы.Show
В работе рассматривается последний способ запуска программы.
68 |
Программирование в среде электронных таблиц Microsoft Excel |
Рабочее задание 1. Вставить на рабочий лист командную кнопку для запуска пользовательской формы
Выполнение
Р1. Откройте свою книгу, активизируйте лист "БудьтеЗдоровы".
Р2. В Excel 2007/2010 дайте команду Разработчик | Элементы управления | Вставить (Developer | Controls | Insert) и вставьте на рабочий лист командную кнопку.
В Excel 2003 щёлкните правой кнопкой по какой-либо панели инструментов и выберите из контекстного меню панель Элементы управления. Выберите на ней командную кнопку и вставьте на рабочий лист.
Обратите внимание, что на панели Элементы управления активизировалась кнопка Конструктор форм, указывающая, что Excel находится в режиме конструктора. В этом режиме выполняются все действия по настройке элементов управления.
Р3. Выполните:
а) откройте окно свойств (окно Properties) и замените в нём свойство Caption на "Регистрация"; окно свойств закройте; б) на панели Элементы управления щелкните по кнопке Исходный текст (или
из контекстного меню выберите такой же пункт); в окне кода листа появится заготовка программы CommandButton1_Click:
Private Sub CommandButton1_Click()
End Sub
в) добавьте в заготовку программы приведённую выше инструкцию инициализации формы.
Р4. Перейдите в окно приложения и отожмите кнопку Конструктор форм. Всё готово. Осталось испытать полученный программный комплекс.
Щелкните по кнопке "Регистрация". В появившемся окне введите две-три позиции регистрации. Покажите результат преподавателю.
Рабочее задание 2. Вставить на рабочий лист объект WordArt для запуска пользовательской формы
Выполнение
Р5. Вставьте на рабочий лист объект WordArt, введите в него текст "Регистрация".
Р6. Перейдите в среду VBA, откройте модуль листа "БудьтеЗдоровы" и наберите в нём программу (название может быть другое) objClick (листинг 34);
Листинг 34
Sub objClick() frmБудьтеЗдоровы.Show
End Sub
Стеценко А. А. |
69 |
Р7. Из контекстного меню объекта WordArt выберите пункт "Назначить макрос…" В диалоговом окне "Назначить макрос объекту" выберите созданную программу и подтвердите выбор. Снимите выделение с объекта WordArt (щёлкните за его пределами). Готово.
Щёлкните по объекту WordArt. Должно появиться диалоговое окно "Регистрация туристов фирмы Будьте здоровы!". Введите две-три позиции для проверки работоспособности программы. Покажите результат преподавателю.
Сохраните книгу.
Контрольные вопросы к работе VBA11
К1. Объясните способы запуска пользовательской формы на выполнение. К2. Как запустить пользовательскую форму на выполнение в среде VBA?
К3. Как запустить пользовательскую форму на выполнение в среде приложения?
К4. Как запустить пользовательскую форму на выполнение с помощью элемента управления? Где может находиться программа обработки события?
К5. Как запустить пользовательскую форму на выполнение с помощью объекта WordArt? Где может находиться программа обработки события?
Работа VBA12. Встроенные функции InputBox и MsgBox
Цель работы: ознакомление с приёмами использования встроенных диалоговых окон InputBox и MsgBox для ввода данных и вывода сообщений.
Введение
Функции InputBox и MsgBox имеются и в VBA, и в Excel. Несмотря на внешнюю схожесть, а также схожесть названий и назначений, между функциями Excel и VBA имеются различия в функциональности: функции Excel более интеллектуальны.
Функции InputBox и MsgBox образуют на экране собственное окно, поэтому их часто называют встроенными диалоговыми окнами.
Функция VBA InputBox
Функция VBA InputBox позволяет ввести одно текстовое значение. Синтаксис:
InputBox(Prompt[, Title] [, Default] _ [, XPos] [, YPos] _ [, Helpfile, Context])
Функция InputBox имеет несколько аргументов, но обязательным является только аргумент prompt.
Prompt – подсказка, текст, выводимый в основном окне функции. Текст должен подсказать пользователю, что нужно сделать.
70 |
Программирование в среде электронных таблиц Microsoft Excel |
Title – заголовок окна. По умолчанию выводится "Microsoft Excel". Default – значение в поле ввода по умолчанию. Если аргумент не задан, то
поле ввода пустое.
XPos и YPos – горизонтальная и вертикальная координаты левого верхнего угла окна на экране, отсчитанные от левого верхнего угла экрана. Если аргументы не заданы, то окно центрируется по горизонтали в начале второй трети экрана по вертикали.
HelpFile и Context – файл и раздел справочной системы.
В листинге 35 приводится фрагмент программы, в котором строится обращение к функции InputBox, а на рис. 9 показано соответствующее окно InputBox
Листинг 35
Dim Answer As String, Def As String Dim Mess As String, theTitle As String theTitle = "Выбор устройства вывода"
Mess = "Выберите устройство вывода:" & vbLf & _ "1 – вывод на рабочий лист" & vbLf & _ "2 – вывод в файл на ЖД" & vbLf & _
"3 - вывод в файл на сменном носителе" & vbLf & _ "4 – вывод на печать"
Def = "1"
Answer = InputBox(prompt:=Mess, Title:=theTitle, _
Default:=Def)
. . .
Рис. 9. Окно функции InputBox в программе в листинге 35.
Наряду с применённым в приведённом фрагменте обращением к функции InputBox возможно и такое:
Answer = InputBox(Mess, theTitle, Def)
Разница в том, как выполнено согласование фактических аргументов с формальными. В первом случае указываются имя формального аргумента и, после алгольного знака присваивания, соответствующий фактический аргумент. Во втором случае фактические аргументы указываются в порядке следо-