Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LabVBA-Системный анализ.doc
Скачиваний:
15
Добавлен:
07.02.2016
Размер:
804.35 Кб
Скачать

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]