- •Методичні вказівки
- •Мовою Visual Basic for Application (vba)”
- •6.040303 Системний аналіз
- •1 Лабораторна робота №1
- •1.1 Теоретичні відомості
- •1.1.1 Функція InputBox
- •1.1.2 Процедура MsgBox
- •Текст процедури
- •Текст процедури
- •Результати роботи програми
- •2 Лабораторна робота №2
- •2.1 Створення макросів
- •2.2 Об’єкт Range, його властивості та методи
- •2.2.1 Деякі властивості
- •2.2.2 Деякі методи
- •2.3 Контрольні питання.
- •3.1.2 Оператор циклу по сімейству об'єктів.
- •3.1.3 Оператори циклу з умовою.
- •3.2 Контрольні питання.
- •3.3 Індивідуальні завдання
- •4 Лабораторна робота №4
- •4.1 Функції користувача
- •Текст програми – функції
- •Текст процедури для виклику функції
- •4.2 Процедури користувача
- •4.3 Контрольні питання
- •4.4 Індивідуальні завдання
- •5 Лабораторна робота №5
- •5.1 Створення нової форми
- •5.2 Деякі властивості та події елементів управління
- •5.3 Створення списків
- •5.4 Створення інтерфейсу користувача
- •Програмний код для кнопки CommandButton1 (подія Click)
- •Програмний код для кнопки CommandButton2 (подія Click)
- •5.5 Контрольні питання
- •5.6 Завдання
- •6 Лабораторна робота №6
- •6.1 Введення та виведення масивів
- •6.2 Контрольні питання
- •6.3 Індивідуальні завдання
- •Література
4 Лабораторна робота №4
Тема: Функції та процедури користувача.
Мета роботи: навчитися створювати функції і процедури та передавати параметри.
4.1 Функції користувача
Синтаксис:
Function Ім’я_Функції (список аргументів) AS type
Інструкції
Ім’я_Функції = вираз
End Function
Якщо функція повинна бути доступна для всіх процедур з усіх модулів, то перед нею ставлять слово Public. Якщо поставити слово Private, то функція буде доступною тільки для процедур з того ж самого модуля, в якому функція визначена.
Список аргументів містить імена змінних із зазначенням типу, записані через кому. Ці аргументи називаються формальними параметрами. А type вказує на тип значення, яке набуває функція.
Обов'язковим у тілі функції є оператор, в якому імені функції присвоюється значення. Достроковий вихід із тіла функції здійснює оператор Exit Function.
Виклик функції здійснюється в операторі присвоювання, в правій частині якого записується ім'я функції та фактичні параметри.
Під час виклику функції фактичні параметри підставляються замість формальних, потім виконуються всі оператори тіла функції, і змінній присвоюється обчислене значення. Між формальними і фактичними параметрами встановлюється відповідність за номером в списку параметрів. Повинні виконуватися такі правила:
кількість фактичних параметрів повинна співпадати з кількістю формальних;
тип кожного фактичного параметра повинний збігатися з типом відповідного формального параметра;
фактичним параметром може бути змінна, константа або вираз відповідного типу.
Створена функція автоматично включається до списку функцій Excel у категорію «Определенные пользователем» і може викликатися з будь-якої клітини активної робочої книги. В цьому випадку параметрами можуть бути також і адреси клітин.
Задача 4.1. Написати функцію користувача для обчислення по заданій формулі та процедуру, яка її викликає.
Текст програми – функції
Function Z(x As Single) As Single
Z = (1.4 + 2*x) / (1 + (2.5 + x + x ^ 2) ^ (1/3 ))
End Function
Текст процедури для виклику функції
Sub main ( )
Dim x As Single , y As Single
x = InputBox("Введіть значення Х")
y = Z(x) ‘ Виклик функції
Worksheets("Лист1") . Cells(2, 1) . Value = x
Worksheets("Лист1") . Cells(2, 2) .Value = y
End Sub
4.2 Процедури користувача
Синтаксис:
Sub Ім’я_Процедури (список аргументів)
Інструкції
End Sub
Перед процедурою також можна ставити одне зі слів Public або Private в залежності від того, буде процедура доступна для всіх процедур з усіх модулів, або тільки для процедур того ж самого модуля.
Процедури користувача з параметрами дозволяють, на відміну від функцій, обчислювати не одне, а декілька значень. Процедури з параметрами повинні викликатися тільки з інших процедур або функцій, на відміну від процедур без параметрів. Всі методи об'єктів VBA реалізовані у вигляді процедур із параметрами.
Список аргументів крім імен змінних із зазначенням типу містить слова ByVal або ByRef, тобто має вигляд:
ByVal ім’яЗмінної As тип або
ByRef ім’яЗмінної As тип
ByVal – вказує, що аргумент передається за значенням. Це означає, що під час виклику процедури значення фактичного параметра записується на місце формального, і потім використовується в обчисленнях. Будь-які зміни формального параметра, оголошеного за значенням, не спричинять змін фактичного параметра.
ByRef – вказує, що аргумент передається за посиланням (тобто за адресою). Опис ByRef використовується в VBA за замовчанням.
Передача параметра за посиланням означає, що під час виклику замість формального параметру записується адреса фактичного параметру. Це означає роботу з областю пам’яті, відведеної для фактичного параметра. Тому, усі зміни формального параметра спричинять за собою зміни фактичного параметра. Параметри, описані за допомогою ByRef, використовується для передачі обчислених значень із процедури в програму, яка її викликає.
Таким чином, параметри процедури поділяють на дві групи:
вхідні, які використовують для обчислень у процедурі, і передають звичайно за значенням;
вихідні, їхні значення обчислюють у процедурі, щоб передати в програму, яка викликає. Їх передають обов'язково за посиланням.
Виклик процедури здійснюється за допомогою її імені та списку фактичних параметрів, записаних в тому ж порядку, що і формальні (див. задачу 4.2). Якщо параметри завдаються явно, то їхній порядок значення не має.
Для виклику процедури може використовуватись й оператор CALL (список фактичних параметрів). Порядок параметрів важливий.
Задача 4.2. Написати процедури для обчислення коренів квадратного рівняння за заданими коефіцієнтами.
У процедурі буде три вхідних параметри – коефіцієнти рівняння a, b та c і три вихідних параметри – корені x1, x2 і ознака наявності дійсних коренів – pr. Параметр pr набуває значення True (істина), якщо рівняння має дійсні корені, тобто дискримінант D ≥ 0.
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