Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Dim k As Integer




End Sub

 

3. Оператор циклу з умовою використовується для організації циклу з невідомим заздалегідь числом повторень. Синтаксис оператора:

Do While умова

[Оператори - тіло циклу]

Loop

або

Do

[Оператори - тіло циклу]

Loop While умова

 

Оператори Do While - Loop і Do - Loop While забезпечують багатократне виконання операторів тіла циклу доти, поки умова виконується.

Do Until умова

[Оператори - тіло циклу]

Loop

Або

Do

[Оператори - тіло циклу]

Loop Until умова

 

Оператори Do Until - Loop і Do - Loop Until забезпечують багатократне виконання операторів тіла циклу доти, поки умова не виконається, тобто цикл повторюється тоді, коли умовний вираз має значення неправда.

Приклад 3.7. У списку, що починається в клітині А1, обчислити кількість заповнених рядків і виділити першу вільну клітину у першому стовпчику.

 

 

Sub ПошукВільноїКлітини()

k = 1 ‘ лічильник кількості рядків =1

Range("A1"). Select

Do ‘ початок циклу, що лічить строки

k = k + 1 ‘k збільшуємо на 1

ActiveCell. Offset(1, 0). Select ‘активізуємо клітину в

‘ рядку, що розташовано нижче

Loop While ActiveCell. Value <> "" ‘ продовження циклу, якщо

активна клітина не порожня

MsgBox "Номер першого вільного рядка - " & k

End Sub

 

Приклад 3.8. Наступна процедура, використовуючи властивості Find і FindNext - пошук такої клітини, що містить задане значення, знаходить усі клітини, що містять задане значення, і виділяє їх, змінюючи колір фона на сірий. Значення вводиться користувачем.

 

Sub ПошукВсіхВходжень()

Dim r As Range, FirstAddress As String ‘ об'являються перемінні

Dim c As Single

c=InputBox(“Введіть значення, що розшукується”)

Set r = Range(“A1:B100”). Find(c,,xlValues, xlWhole)

‘до перемінної r запишеться покажчик на знайдену клітину

If Not (r Is Nothing) Then ‘якщо клітина знайдена, то запишемо

FirstAddress = r. Address ‘ її адресу до строкової перемінної

Do ‘ починаємо цикл для пошуку інших клітин

r. Interior. Pattern = xlPatternGray50 ‘ змінюємо колір фона

Set r = Range(“A1:B100”). FindNext(r) ‘пошук наступної

Loop While Not (r Is Nothing) And r. Address <> FirstAddress

‘ Цикл працює поки знаходяться клітини й адреса не співпадає з

‘ адресою першої, тому що пошук йде по колу.

Else

MsgBox “Клітини з таким значенням немає”

End If

End Sub

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
  Найменування товару Ціна одиниці Кількість одиниць Вартість партії
  Книга     =Вартість(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

 

 

5 Створення форм та їх використання

 




Поделиться с друзьями:


Дата добавления: 2014-10-23; Просмотров: 377; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.053 сек.