Professional Documents
Culture Documents
Мова VBA
Мова VBA
• Do
оператори
Loop [{While | Until} Логічний вираз]
Програма мовою VBA
• Програма мовою VBA складається із спільної області
та множини підпрограм
• В спільній області визначаються глобальні змінні, які
можна використовувати в усіх підпрограмах, ці змінні
дають можливість передавати інформацію із однієї
підпрограми до іншої
• Підпрограми поділяють на процедури та функції.
Функція обов’язково повертає певне значення
(числове, текстове, логічне тошо)
• Синтаксис
• [Public | Private | Friend] [Static] Function name
[(arglist)] [As type]
[statements]
[name = expression]
[Exit Function]
[statements]
[name = expression]
• End Function
Програма мовою VBA
• Процедури виконують певні дії і не повертають
значення
• Синтаксис
• [Private | Public | Friend] [Static] Sub name [(arglist)]
[statements]
[Exit Sub]
[statements]
• End Sub
• Процедури обробки подій виконуються автоматично
при виникненні події. Інші процедури викликаються
програмно. Для виклику процедури потрібно вказати
її ім’я та параметри (якщо вони є)
• Ім’я процедур обробки подій складається із імені
об’єкта та імені події, розділених знаком
підкреслення. Наприклад Knnext_click
Приклад задачі
• Робітникам виплачується заробітна плата залежно від
професії, кваліфікації та кількості відпрацьованих змін.
Для кожної професії визначена тарифна ставка – кількість
грошей, що платиться за одну відпрацьовану зміну.
Кваліфікація робітника визначається розрядом – від
першого до шостого. Для кожного розряду визначений
кваліфікаційний коефіцієнт, на який множиться тарифна
ставка. Для першого розряду цей коефіцієнт дорівнює 1,
для вищих розрядів він зростає. Отже, кількість виданих
робітникові грошей визначається рівністю
• Зарплата = Тарифна_ставка * Кваліфікаційний_коефіцієнт
* Кількість_змін – Податок (20% від зарплати)
Постановка задачі
• Вхідна інформація – тарифна ставка, кваліфікаційний
коефіцієнт та кількість відпрацьованих змін для
кожного робітника
• Проміжна інформація – нарахована зарплата,
податок
• Вихідна інформація – зарплата до видачі
• Вхідна інформація поділяється на постійну (тарифна
ставка та кваліфікаційний коефіцієнт) та змінну
(кількість відпрацьованих змін ). Змінна інформація
змінюється при кожному циклі нарахування зарплати,
постійна використовується в багатьох циклах.
• Постійна інформація береться із довідників, а змінна
вводиться з клавіатури.
Довідники
Професія Тариф
Токар 830
Ливарник 950
Фрезерувальник 850
Шліфувальник 880
Кваліфікація Коефіцієнт
Перший розряд 1
Другий розряд 1,1
Третій розряд 1,2
Четвертий розряд 1,3
П'ятий розряд 1,4
Шостий розряд 1,5
Основна таблиця
Шифр Прізвище Ім'я По-батькові Професія Тариф Кваліфікація Коефіцієнт Зміни Зарплата Податок Видано
1 Іванченко Петро Вікторович Токар 830 Третій розряд 1,2 25 24900 4980 19920
2 Петренко Віктор Юрійович Ливарник 950 Четвертий розряд 1,3 28 34580 6916 27664
3 Терещенко Віталій Петрович Фрезерувальник 850 Шостий розряд 1,5 24 30600 6120 24480
4 Олексієнко Артем Анатолайович Шліфувальник 880 Другий розряд 1,1 23 22264 4452,8 17811,2
5 Міщенко Олексій Віталійович Ливарник 950 Перший розряд 1 27 25650 5130 20520
6 Шапаренко Юрій Олегович Токар 830 П'ятий розряд 1,4 28 32536 6507,2 26028,8
7 Ведмеденко Віталій Юрійович Фрезерувальник 850 Шостий розряд 1,5 25 31875 6375 25500
8 Левченко Андрій Олексійович Ливарник 950 Шостий розряд 1,5 25 35625 7125 28500
=ВПР(M2;$A$2:$B$5;2;ЛОЖЬ)
=ВПР(O2;$D$2:$E$7;2;ЛОЖЬ)
Вимоги до програми
• 1) Програма повинна давати можливість переглядати
введені дані. При цьому потрібно забезпечити захист
інформації від можливих випадкових змін
• 2) Програма повинна давати можливість доповнювати
основну таблицю новими даними. При цьому потрібно
забезпечити коректність введених даних та дати
користувачеві можливість відмовитись від доповнення
• 3) Програма повинна давати можливість редагувати
введені дані. Потрібно дати користувачеві можливість
відмовитись від правок
• 4) Програма повинна давати можливість видаляти дані.
Потрібно дати користувачеві можливість відмовитись від
видалення
• 5) Програма повинна давати можливість знайти потрібні
дані за прізвищем робітника, професією та кваліфікацією
Основна форма
Форма пошук
Програма відкриття форми
• Private Sub UserForm_Initialize()
• ind = 1
• Range("A2").Select
• While ActiveCell.Value <> ""
• prof.AddItem ActiveCell.Value
• ActiveCell.Offset(1, 0).Select
• Wend
• Range("D2").Select
• While ActiveCell.Value <> ""
• kwal.AddItem ActiveCell.Value
• ActiveCell.Offset(1, 0).Select
• Wend
Програма відкриття форми
• Range("I2").Select
• While ActiveCell.Value <> ""
• n=n+1
• w = w + ActiveCell.Offset(0, 11).Value
• ActiveCell.Offset(1, 0).Select
• Wend
• w_rob.Value = n
• w_widano.Value = w
• Range("I2").Select
• viwed
• tab_nom.Locked = True
• prizv.Locked = True
• name1.Locked = True
• name2.Locked = True
• prof.Locked = True
• tar_stav.Locked = True
Програма відкриття форми
• kwal.Locked = True
• koef.Locked = True
• zmin.Locked = True
• zarp.Locked = True
• podatok.Locked = True
• widano.Locked = True
• w_rob.Locked = True
• w_widano.Locked = True
• If ActiveCell.Offset(1, 0).Value <> "" Then
• Knnext.Enabled = True
• Knlast.Enabled = True
• Else
• Knnext.Enabled = False
• Knlast.Enabled = False
• End If
Програма відкриття форми
• If ActiveCell.Row = 2 Then
• Knprev.Enabled = False
• Knfirst.Enabled = False
• Else
• Knprev.Enabled = True
• Knfirst.Enabled = True
• End If
• Knadd.Enabled = True
• Knedit.Enabled = True
• Knsave.Enabled = False
• Knvid.Enabled = False
• Kndel.Enabled = True
• Knfind.Enabled = True
• Knvih.Enabled = True
• End Sub
Програма виведення даних на екран
• Public Sub viwed()
• tab_nom.Value = ActiveCell.Value
• prizv.Value = ActiveCell.Offset(0, 1).Value
• name1.Value = ActiveCell.Offset(0, 2).Value
• name2.Value = ActiveCell.Offset(0, 3).Value
• prof.Value = ActiveCell.Offset(0, 4).Value
• tar_stav.Value = ActiveCell.Offset(0, 5).Value
• kwal.Value = ActiveCell.Offset(0, 6).Value
• koef.Value = ActiveCell.Offset(0, 7).Value
• zmin.Value = ActiveCell.Offset(0, 8).Value
• zarp.Value = ActiveCell.Offset(0, 9).Value
• podatok.Value = ActiveCell.Offset(0, 10).Value
• widano.Value = ActiveCell.Offset(0, 11).Value
• End Sub