VBA Лаб.р.2_укр
.pdfFunction F(x As Double, y As Double) As Double
F = x+y
End Function
Sub DemoFun()
MsgBox F(1,3) ' Виводить вікно повідомлення з результатом
'обчислення функції F при значеннях
'x=1 і y=3
End Sub
Передача параметрів за посиланням та значенням
При виклику процедури або функції до неї передаються деякі параметри. Всередині процедури цим параметрам можуть бути присвоєні якісь значення, які збережуться в них після виходу із процедури або функції. Таким чином, за замовчуванням при передачі змінних в якості параметрів до процедури або функції передаються фізичні адреси цих змінних. Тому всередині процедури або функції їх вміст може бути модифікований. Для явної вказівки передачі параметрів до процедури за посиланням використовується ключове слово ByRef.
Іншим способом передачі параметрів до процедури є передача їх за значенням. При цьому способі передачі параметрів до процедури попадають не самі змінні, а їх значення. Передача параметрів за значенням задається ключовим словом ByVal. В наступному прикладі показана відмінність передачі параметрів за посиланням від передачі параметрів за значенням.
Sub DemoByValByRef(ByVal a, b, ByRef с)
'а передається за значенням
'за замовчуванням b передається за посиланням
'с передається за посиланням
а = а + 1 b = b + a
с = с + а End Sub
Sub Test() |
|
a = 1: b = 10: c = 100 |
|
DemoByValByRef a, b, c |
|
MsgBox a |
' Відобразиться 1 |
MsgBox b |
' Відобразиться 11 |
MsgBox c |
' Відобразиться 101 |
End Sub |
|
11
Вбудовані діалогові вікна
В проектах VBA часто зустрічаються два різновиди діалогових вікон: вікна повідомлень і вікна введення. Вони вбудовані у VBA, і якщо їх можливостей достатньо, то можна обійтись без проектування власних діалогових вікон. Вікно повідомлення (MsgBox) виводить найпростіші повідомлення для користувача, а вікно введення (ІnputBox) забезпечує введення інформації.
Вікно введення
Функція ІnputBox виводить на екран діалогове вікно, яке містить повідомлення, поле введення і дві кнопки: OK і Cancel (рис. 1).
Рис. 1
Ця функція встановлює режим очікування введення тексту користувачем і натискання кнопки. Потім, при натисканні кнопки ОК, повертає значення типу Strіng, яке містить текст, введений в поле введення; при натисканні кнопки Cancel повертає порожній рядок (Empty).
InputBox (Prompt [,Title] [,Default] [,Xpos] [,Ypos] [,Helpfile, Context])
де
Prompt – строковий вираз, який відображається як повідомлення в діалоговому вікні.
Title – строковий вираз, що відображається в заголовку діалогового вікна. Якщо цей параметр опущений, то в заголовку розміщується ім'я додатка.
Default – строковий вираз, який відображається в полі введення за замовчуванням, якщо користувач не введе інший рядок. Якщо цей параметр опущений, то поле введення за замовчуванням порожнє.
Xpos – числовий вираз, який задає відстань по горизонталі між лівою границею діалогового вікна і лівим краєм екрана. Якщо цей параметр опущений, то діалогове вікно вирівнюється по центру екрана по горизонталі.
12
Ypos – числовий вираз, який задає відстань по вертикалі між верхньою границею діалогового вікна і верхнім краєм екрана. Якщо цей параметр опущений, то діалогове вікно міститься по вертикалі приблизно на одну третину висоти екрана.
Helpfile – строковий вираз, який визначає ім'я файлу довідки, що містить довідкові відомості про дане діалогове вікно. Якщо цей параметр зазначений, то необхідно вказати також параметр Context.
Сontext – числовий вираз, який визначає номер відповідного розділу довідкової системи. Якщо цей параметр зазначений, то необхідно вказати також параметр Helpfіle.
Параметри, зазначені у квадратних дужках, необов'язкові.
Приклад коду, який задає відображення на екрані вікна введення рис. 1 (значення, що вводиться в поле введення присвоюється змінній n):
Sub DemoInputBox1() Dim n As String
n = InputBox("Введите ваше имя", "Пример окна ввода") End Sub
Вікно повідомлення
Процедура MsgBox виводить на екран діалогове вікно, яке містить повідомлення, встановлює режим очікування натискання користувачем кнопки, а потім повертає значення типу Іnteger, що вказує яка кнопка була натиснута.
MsgBox (Prompt [,Buttons] [,Title] [,Helpfile, Context])
Prompt – строковий вираз, який відображає повідомлення в діалоговому вікні.
Buttons – числовий вираз, що представляє суму констант, які вказують кількість і тип кнопок та тип значка, що відображаються, основну кнопку і модальність вікна повідомлення. Значення за замовчуванням цього параметра дорівнює 0. Значення констант, що визначають кількість і тип кнопок та тип значка наведені в таблицях нижче.
Title – строковий вираз, який відображається в заголовку діалогового вікна. Якщо цей параметр опущений, то в заголовку розміщується ім'я додатка.
Helpfile – строковий вираз, який визначає ім'я файлу довідки, що містить довідкові відомості про дане діалогове вікно. Якщо цей параметр зазначений, необхідно вказати також параметр Context.
Context – числовий вираз, який визначає номер відповідного розділу довідкової системи. Якщо цей параметр зазначений, то необхідно
13
вказати також параметр Helpfіle.
Параметри, зазначені у квадратних дужках, необов'язкові.
Можливі значення параметра Buttons процедури MsgBox, який визначає кнопки, що відображаються в діалоговому вікні:
Константа |
Кнопки, що відображаються |
VbOKOnly
VbOKCanсel
VbAbortRetryIgnore
VbYesNoCancel
VbYesNo
VbRetryCancel
Можливі значення параметра Buttons процедури MsgBox, який визначає інформаційний знак, що відображається в діалоговому вікні:
Константа |
Значок повідомлення |
VbCritical
VbQuestion
VbExclamation
VbInformation
Можливі значення параметра Buttons процедури MsgBox, який визначає основну кнопку в діалоговому вікні:
14
Константа |
|
Номер основної кнопки |
|
|
|
|
|
|
|
vbDefaultButton1 |
|
|
1 |
|
|
|
|
|
|
vbDefaultButton2 |
|
|
2 |
|
|
|
|
|
|
vbDefaultButton3 |
|
|
3 |
|
|
|
|
||
Приклади вікон повідомлень |
|
|||
Sub DemoMsgBox() |
|
|
|
|
Dim x As Variant |
|
|
|
|
Dim y As Double |
|
|
|
|
x = InputBox("Введите х") |
|
|
|
|
y = x^2 |
|
|
|
|
MsgBox y |
|
|
' Рис.2 |
|
MsgBox "х=" & x & vbNewLine & "у=" & y |
|
' Рис.3 |
||
MsgBox "y=" & y, vbInformation |
|
|
' Рис.4 |
|
MsgBox "y=" & y, vbInformation + vbDefaultButton1 + vbYesNo ' Рис.5 |
||||
MsgBox "y=" & y, vbInformation, "Нахождение квадрата" |
' Рис.6 |
|||
End Sub |
|
|
|
Рис. 2
Рис. 3
Рис. 4 15
Рис. 5
Рис. 6
Визначення натиснутої кнопки у вікні повідомлення
Процедура MsgBox зручна для виводу тієї або іншої інформації. Однак якщо треба довідатись, який вибір зробив користувач при натисканні кнопок, які відображаються в діалоговому вікні, то процедуру MsgBox треба використовувати як функцію. В цьому випадку значення, яке повертає MsgBox, треба привласнити якійсь змінній, а параметри функції взяти у дужки.
Можливі значення константи, що повертає функція MsgBox в залежності від того, яка кнопка діалогового вікна натиснута:
Константа |
Натиснута кнопка |
vbOK
vbCancel
vbAbort
vbRetry
vbIgnore
vbYes
16
vbNo
Далі наведений приклад використання функції MsgBox з аналізом натиснутої кнопки. В цьому прикладі на екрані відображається діалогове вікно з двома кнопками Да і Нет та значком питання. При натисканні кнопки Да документ відображається в режимі розмітки, а при натисканні кнопки Нет – у звичайному режимі.
Sub DemoYesNo()
Dim answer As Integer
answer = MsgBox("Отобразить документ в режиме разметки", _ vbYesNo + vbQuestion + vbDefaultButton1, _
"Режим отображения документа") Select Case answer
Case vbYes
ActiveWindow.View.Type = wdPrintView Case vbNo
ActiveWindow.View.Type = wdNormalView End Select
End Sub
17
ЗАВДАННЯ ДО ЛАБОРАТОРНОЇ РОБОТИ
ЗАВДАННЯ 1
Створити функцію користувача. Вставити цю функцію в чарунку робочого аркуша.
y 2sin( x) sin(3 x) 3x
ТЕХНОЛОГІЯ ВИКОНАННЯ
1.Відкрийте Mіcrosoft Excel. Збережіть робочу книгу (Файл – Сохранить как), вибравши ім'ям файлу своє прізвище.
2.Виберіть меню Сервис – Макрос – Макросы. Введіть ім'я створюваного макросу – функция, натисніть кнопку Создать (рис. 7).
Рис. 7
3.Відкриється вікно додатка VBA (рис. 8).
Рис. 8 18
4.Існуючий текст коду макросу
Sub функция() End Sub
замініть на текст програми (рис. 9), що обчислює задану функцію, використовуючи стандартні функції мови VBA:
Public Function функция(x)
функция =2* Sin(Application.Pi() * x) + (Sin(Application.Pi() * 3 * _ x)) / (3 * x)
End Function
Рис. 9
5.Збережіть (File - Save).
6.Щоб перевірити роботу створеної функції, закрийте додаток VBA,
ввійдіть в Mіcrosoft Excel.
7.В чарунку А1 введіть 0,5.
8.Виділіть чарунку В1, виберіть меню Вставка – Функция, відкриється
Мастер функций – шаг 1 из 2.
9.В Категории виберіть Полный алфавитный перечень, в переліку знайдіть функция (рис. 10) і натисніть ОК.
19
Рис. 10
10.Введіть в поле введення адресу чарунки А1 і натисніть ОК (рис. 11).
Рис. 11
В чарунці В1 з’явиться результат.
11.Збережіть робочу книгу.
20