
- •Міністерство освіти і науки україни
- •Програмування мовою
- •У середовищі Microsoft Excel
- •1 Введення
- •2 Об'єкти Excel, їхньої властивості і методи.
- •2.1 Об'єкт Workbook і сімейство Workbooks
- •2.2 Об'єкт Worksheet і сімейство Worksheets
- •Count - повертає кількість об'єктів у наборі; у прикладі перемінної k присвоюється значення, рівне числу рядків діапазону a1:d4
- •Приклад макроса
- •3 Мова програмування vba
- •3.1 Типи перемінних, оголошення перемінних, область дії перемінних
- •Оператор присвоювання
- •Стандартні діалогові вікна
- •Умовний оператор і оператор вибору.
- •3.5 Оператори циклу
- •Оператор циклу по сімейству об'єктів.
- •4 Створення функцій і процедур користувача
- •5 Створення форм та їх використання
- •5.1 Елементи керування у формах, їхні властивості, методи, події.
- •5.2 Приклади створення форм
- •Література
4 Створення функцій і процедур користувача
4.1 Функція користувача дозволяє обчислити яке-небудь значення, що вона повертає користувачу. Синтаксис оголошення функції:
Function Ім'я_Функції(СписокАргументів) As ТипФункції
Інструкції або оператори VBA
Ім'я_Функції = Вираз
[Exit Function]
End Function
Перший рядок оголошення функції називається заголовком функції. Список аргументів складається з імен перемінних із указівкою їхнього типу і має вигляд:
Аргумент1 As Тип1, Аргумент2 As Тип2, …
Наприклад, заголовок функції з ім'ям Податок і двома аргументами має вид:
Function Податок(Оклад As Currency, Днів As Integer) As Currency
Аргументи в заголовку функції називаються формальними параметрами.
Оператор, у котрому імені функції присвоюється значення, є обов'язковим у тілі функції. Оператор Exit Function здійснює негайний вихід із тіла функції і записується в разі потреби.
Функцію, для того, щоб вона обчислила запрограмоване значення, необхідно викликати. Зробити це можна або в іншій процедурі або функції, або в клітині листа робочої книги.
Виклик функції з процедури або іншої функції здійснюється в операторі присвоювання, у якому в лівій частині записується перемінна, а в правій частині записується ім'я функції та у дужках фактичні параметри. При виклику фактичні параметри підставляються замість формальних, потім виконуються всі оператори - тіло функції, і перемінній присвоюється обчислене значення. Між формальними і фактичними параметрами установлюється відповідність по місцю в списку параметрів і повинні виконуватися такі правила:
Кількість фактичних параметрів повинна збігатися з кількістю оголошених формальних;
Тип кожного фактичного параметра повинний збігатися з типом відповідного формального параметра;
Фактичним параметром може бути перемінна, константа або вираз відповідного типу.
Наприклад, виклик функції Податок, заголовок якої приведений вище, може виглядати так:
Dim N as Currency, Sal As Currency, d As Integer
Sal=350
d=24
N= Податок(Sal,d) ‘фактичні параметри - перемінні
Або так:
N= Податок(350,24) ‘ фактичні параметри - константи
Або так:
N= Податок(Sal / 2 , d) ‘фактичний параметр - вираз
Створена функція автоматично включається в список стандартних функцій Excel у категорію «Визначені користувачем» і може викликатися з будь-якої клітини активної робочої книги.
Для цього вказується ім'я функції і фактичні параметри в дужках. У цьому випадку параметрами можуть бути константи, адреси клітин або вирази. Параметри розділяються точкою з комою.
Приклад 4.1. На хвилину уявіть собі, що ви менеджер видавництва по оптовому продажу книг. Для притягнення покупців у вашому видавництві введена прогресивна шкала цін. Якщо продається від 100 до 200 примірників книги, то знижка від її відпускної ціни складає 7%. Якщо продається від 201 до 300 примірників, то знижка складає 10%, а якщо понад 300 примірники - 15%. Крім того, для постійних клієнтів передбачена додаткова знижка в розмірі 5%. Створимо функцію користувача з ім'ям Вартість для розрахунку вартості партії книг. Для аргументу Знижка передбачимо тільки два припустимих значення: 1 для постійних клієнтів і 0 у противному випадку.
Function Вартість(ЦінаОднієїКниги As Currency, _
Кількість As Integer, Знижка As Byte) As Currency
Dim ВартістьБезЗнижки As Currency
‘Обчислення вартості без урахування знижки для постійних
‘ клієнтів
Select Case Кількість
Case Is <100
ВартістьБезЗнижки= ЦінаОднієїКниги * Кількість
Case 100 To 200
ВартістьБезЗнижки= ЦінаОднієїКниги * Кількість*0.93
Case 200 To 300
ВартістьБезЗнижки= ЦінаОднієїКниги * Кількість*0.9
Case Is >300
ВартістьБезЗнижки= ЦінаОднієїКниги * Кількість*0.85
End Select
‘Корегування вартості з урахуванням знижки для постійних клієнтів
If Знижка = 0 Then
Вартість= ВартістьБезЗнижки
Else
Вартість= ВартістьБезЗнижки * 0.95
End If
End Function
Виклик функції здійснюється в операторі присвоювання в якій-небудь процедурі або інший функції, у якому в правій частині записується ім'я функції та у дужках фактичні параметри.
Наприклад, створимо процедуру, що викликає функцію Вартість:
Sub Розрахунок_Вартості()
Dim ціна As Currency, скільки As Integer, постКлієнт As Byte
Dim Оплата As Currency
ціна=InputBox(“Введіть ціну одиниці товару”)
скільки=InputBox(“Введіть кількість одиниць товару”)
постКлієнт=InputBox(“ чи є клієнт постійним (0-ні, 1-так)”)
Оплата=Вартість(ціна, скільки, постКлієнт) ‘виклик функції
MsgBox(“Клієнт повинний сплатити - ” & Оплата & ” гривень”)
End Sub
Створена функція автоматично включається в список стандартних функцій Excel у категорію «Визначені користувачем» і може визиватися з будь-якої клітини активної робочої книги.
Для цього вказується ім'я функції і параметри в дужках. Наприклад,
|
A |
B |
C |
D |
1 |
Найменування товару |
Ціна одиниці |
Кількість одиниць |
Вартість партії |
2 |
Книга |
24 |
39 |
=Вартість(B2;C2;0) |
Мал. 3. Частина електронної таблиці. В клітині D2 виклик функції користувача.
4.2 Процедури користувача з параметрами дозволяють, на відміну від функції, обчисляти і повертати в програму , що викликає, не одно, а декілька значень. Процедури з параметрами повинні визиватися тільки з інших процедур або функцій, вони не можуть бути просто запущені на виконання як процедури без параметрів. Всі методи об'єктів VBA реалізовані у вигляді процедур із параметрами. Тому ви вже знайомі з правилами виклику процедур, при виклику вказується ім'я процедури і через прогалину записується список фактичних параметрів. Процедура з параметрами об'являється в модулі.
Оголошення процедури має вигляд:
Sub Ім'я_Процедури ( СписокПараметрів )
Dim … ‘ оголошення внутрішніх перемінних
Оператори - тіло процедури
[Exit Sub]
End Sub
СписокПараметрів має такий синтаксис (службові слова, що зазначені в квадратних дужках, можуть бути присутніми при оголошенні параметрів, а можуть бути відсутніми):
[Optional] [ ByVal | ByRef ] имяПеременной [ As тип ] [ = значення]
Роз’яснемо зміст ключових слів, використовуваних у списку параметрів.
Optional - указує, що аргумент не є обов'язковим. При використанні цього елемента всі наступні аргументи, що розташовані в списку параметрів, також повинні бути необов'язковими та описані за допомогою ключового слова Optional. Всі аргументи, описані за допомогою ключового слова Optional, повинні мати тип Variant.
ByVal - указує, що аргумент передається за значенням. Це означає, що при виклику процедури значення фактичного параметра переписується на місце формального, що потім і використовується в обчисленнях. Будь-які зміни формального параметра, оголошеного за значенням, не спричинять за собою змін фактичного параметра.
ByRef - указує, що аргумент передається по посиланню (за адресою). Опис ByRef використовується в VBA по умовчанню. Передача параметра по посиланню означає, що при виклику у формальний параметр записується адреса фактичного параметра, що означає роботу з областю пам'яті, відведеної для фактичного параметра. Тому, усі зміни формального параметра спричинять за собою зміни фактичного параметра. Ця ситуація використовується для передачі обчислених значень із процедури в програму , що викликає.
= значення дозволяє задати значення параметра по умовчанню. Використовується тільки разом із параметром Optional. Якщо зазначений тип Object, єдиним значенням по умовчанню може бути значення Nothing.
Таким чином, параметри процедури поділяють на дві групи:
вхідні, їх використовують для обчислень у процедурі потрібних значень і передають звичайно за значенням;
вихідні, їхні значення обчислюють у процедурі, щоб передати обчислені значення в програму , що викликає. Їх передають обов'язково по посиланню.
Приклад 4.2. Наведемо приклад процедури, що обчислює корені квадратного рівняння a x2 + b x + c =0 по заданих коефіцієнтах.
У процедурі буде три вхідних параметри - коефіцієнти рівняння, і три вихідних параметри - корені x1, x2 і ознака наявності дійсних коренів - pr.
Sub Корені( ByVal a As Single, ByVal b As Single, ByVal c As Single,_
ByRef x1 As Single, ByRef x2 As Single, ByRef pr As Boolean)
Dim D As Single ‘ об’ява внутрішньої перемінної D
D=b^2-4*a*c ‘ обчисляємо дискримінант
pr = ( D >= 0 ) ‘pr=True, якщо дійсні корені є
If pr Then
x1 = (-b+sqr(D))/(2*a)
x2 = (-b-sqr(D))/(2*a)
End If
End Sub
Щоб викликати цю процедуру, напишемо таку процедуру без параметрів:
Sub Рішення_Рівняння()
Dim a As Single, b As Single, c As Single
Dim корень1 As Single, корень2 As Single, кореніЄ As Boolean
a=InputBox(“Введіть коефіцієнт при x^2”)
b=InputBox(“Введіть коефіцієнт при x”)
c=InputBox(“Введіть вільний член рівняння”)
Корені a, b, c, корень1, корень2, кореніЄ ‘ це виклик процедури
If корніЄ Then
MsgBox “x1=” & Cstr(корень1) & “ x2=” & Cstr(корень2)
Else
MsgBox “Коренів немає”
End If
End Sub