Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
obch_texn_vba_camoc.doc
Скачиваний:
4
Добавлен:
19.08.2019
Размер:
3.34 Mб
Скачать

Тема роботи: Функції та процедури

Мета роботи: одержання практичних навичок програмування і розв’язання задач з використанням функцій та процедур

8.1Теоретичні відомості

8.1.1 Функції користувача

Синтаксис:

Function Ім’я_Функції (список аргументів) AS type

Інструкції

Ім’я_Функції = вираз

End Function

Якщо функція повинна бути доступна для всіх процедур з усіх модулів, то перед нею ставлять слово Public. Якщо поставити слово Private, то функція буде доступною тільки для процедур з того ж самого модуля, в якому функція визначена.

Список аргументів містить імена змінних із зазначенням типу, записані через кому. Ці аргументи називаються формальними пара­метрами. А type вказує на тип значення, яке набуває функція.

Обов'язковим у тілі функції є оператор, в якому імені функції присвоюється значення. Достроковий вихід із тіла функції здійснює оператор Exit Function.

Виклик функції здійснюється в операторі присвоювання, в пра­вій частині якого записується ім'я функції та фактичні параметри.

Під час виклику функції фактичні параметри підставляються замість формальних, потім виконуються всі оператори тіла функції, і змінній присвоюється обчислене значення. Між формальними і фак­тичними параметрами встановлюється відповідність за номером в списку параметрів. Повинні виконуватися такі правила:

  • кількість фактичних параметрів повинна співпадати з кількістю формальних;

  • тип кожного фактичного параметра повинний збігатися з типом відповідного формального параметра;

  • фактичним параметром може бути змінна, константа або вираз відповідного типу.

Створена функція автоматично включається до списку функцій Excel у категорію «Определенные пользователем» і може викликатися з будь-якої клітини активної робочої книги. В цьому випадку парамет­рами можуть бути також і адреси клітин.

Задача 8.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

8.1.2 Процедури користувача

Синтаксис:

Sub Ім’я_Процедури (список аргументів)

Інструкції

End Sub

Перед процедурою також можна ставити одне зі слів Public або Private в залежності від того, буде процедура доступна для всіх проце­дур з усіх модулів, або тільки для процедур того ж самого модуля.

Процедури користувача з параметрами дозволяють, на відміну від функцій, обчислювати не одне, а декілька значень. Процедури з параметрами повинні викликатися тільки з інших процедур або функ­цій, на відміну від процедур без параметрів. Всі методи об'єктів VBA реалізовані у вигляді процедур із параметрами.

Список аргументів крім імен змінних із зазначенням типу містить слова ByVal або ByRef, тобто має вигляд:

ByVal ім’яЗмінної As тип або

ByRef ім’яЗмінної As тип

ByVal – вказує, що аргумент передається за значенням. Це озна­чає, що під час виклику процедури значення фактичного параметра записується на місце формального, і потім використовується в обчис­леннях. Будь-які зміни формального параметра, оголошеного за значенням, не спричинять змін фактичного параметра.

ByRef – вказує, що аргумент передається за посиланням (тобто за адресою). Опис ByRef використовується в VBA за замовчанням.

Передача параметра за посиланням означає, що під час виклику замість формального параметру записується адреса фактичного пара­метру. Це означає роботу з областю пам’яті, відведеної для фактично­го параметра. Тому, усі зміни формального параметра спричинять за собою зміни фактичного параметра. Параметри, описані за допомогою ByRef, використовується для передачі обчислених значень із процеду­ри в програму, яка її викликає.

Таким чином, параметри процедури поділяють на дві групи:

  • вхідні, які використовують для обчислень у процедурі, і переда­ють звичайно за значенням;

  • вихідні, їхні значення обчислюють у процедурі, щоб передати в програму, яка викликає. Їх передають обов'язково за посиланням.

Виклик процедури здійснюється за допомогою її імені та списку фактичних параметрів, записаних в тому ж порядку, що і формальні (див. задачу 4.2). Якщо параметри завдаються явно, то їхній порядок значення не має.

Для виклику процедури може використовуватись й оператор CALL (список фактичних параметрів). Порядок параметрів важливий.

Задача 8.2 Знайти суму Max елементів масивів Х(n) та Y (n). Мах елементи масивів знайти за допомогою функції. Для введення елементів масива написати процедуру.

Інтерфейс задачі даний на рис. 8.2.

txtN

txM

cmdRes

cmdRes

txtRes

txtRes

Рисунок 8.1 – Форма для приклада 8.2

Код програми

Private Sub cmdRes_Click()

Dim x() As Single, y() As Single

Dim n As Integer, m As Integer

Dim Sum As Single

n = CInt(txtN.Text)

m = CInt(txtM.Text)

ReDim x(n), y(m)

MsgBox „вводим” & m & „-элементов массива X”

Vvod x, n виклик процедури

MsgBox „вводим” & m & „-элементов массива Y”

Vvod y, m ‘виклик процедури

Sum = Max(x, n) + Max(y, m) ‘виклик функції

txtRes.Text = CStr(Sum)

End Sub

Процедура для введення елементів масиву

Private Sub Vvod(z()As Single, l As Integer)

Dim I As Integer

For I = 1 To l

Z(i) = CSng(InputBox(“введите” & i & “–й элемент”))

Next i

End Sub

Функція для знаходження максимального елементу масиву

Private Function Max(z() As Single, I As Integer) As Single

Dim a As Single, I As Integer

A = z(1)

For i = 2 To l

If z(i) > a Then a = z(i)

Next i

Max = a

End Function

Приклад 8.3

Створити матрицю A(n,3), стовпцями якої є вектори X(n), Y(n), Z(n), помножені на Min елементи відповідного вектора. Інтерфейс задачі даний на рис. 8.3

txtN

txtRes

Scrolbars=3

Multiline=True

cmdRes

Рисунок 8.3 – Форма для приклада 8.3

Код програми

Private Sub cmdRes_Click()

Dim x() As Single, y() As Single,z() As Single

Dim a() As Single, i As Integer, n As Integer

Dim MinX As Single,MinY As Single,MinZ As Single

Dim S As String

n = CInt(txtN.Text)

ReDim x(n), y(n), z(n), a(n,3)

S = “”

MsgBox “вводим” & n & “элементов массива Х”

Vvod x,n

MsgBox “вводим” & n & “элементов массива Y”

Vvod y,n

MsgBox “вводим” & n & “элементов массива Z”

Vvod z,n

MinX = Min(x,n) ’виклик функції

MinY = Min(y,n) ’виклик функції

MinZ = Min(z,n) ’виклик функції

For i = l To n

a(i,1) = x(i)*MinX:a(i,2) = y(i)*MinY

a(i,3) = z(i)*MinZ

S = S & a(i,1) & “ ” & a(i,3) & vbCrLf

Next i

txtRes.Text = S

End Sub

Private Function Min(a() As Single, p As Integer) As Single

Dim I As Integer

Min = a(1)

For i = 2 To p

If a(i) < Min Then Min = a(i)

Next i

End Function

Private Sub Vvod(z() As Single, p As Integer)

Dim i As Integer

For i = 1 To p

z(i) = CSng(InputBox(“введите” & i & “-й элемент”))

Next i

End Sub

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