You are on page 1of 25

Інтегроване середовище VBA

VBA — це сучасна система програмування, яку складає


низка компонентів. Одним із компонентів є інтегроване
середовище-оболонка, що включає вбудований редактор
тексту, систему інформаційної контекстуальної допомоги,
транслятор-компілятор, компонувальник і налагоджувач
програм, а також елементи призначеного для користувача
інтерфейсу.
У VBA є близько 200 вбудованих операторів і функцій. Кожні
оператор і функція мають чітку структуру (синтаксис), тобто
правила граматики, пунктуації та орфографії, що
використовуються для їх опису і розпізнання. Для опису
операторів застосовуються різні символи та ключові слова.
Ключове слово - це слово, призначене винятково для Visual
BASIC; програміст не може застосовувати ключові слова в
своїх власних цілях. За замовчуванням для виділення
ключових слів у вікні редагування коду використовується
шрифт синього кольору
Інтегроване середовище VBA
Змінні в мові VBA
• Поняття “змінна” — важлива складова кожної мови
програмування. Змінна - це іменована область пам 'яті,
призначена для збереження даних, яка в ході виконання
програми набуває різних значень. Будь-яка змінна має своє
ім'я. Таким чином, для доступу до вмісту пам'яті досить
знати ім'я змінної. Ім'я змінної — це рядок символів, що
ідентифікує змінну у програмі. Імена змінних у мові Visual
BASIC створюються за певними правилами:
• Першим символом імені має бути літера. Інші символи —
літери та цифри. Можна використовувати символ
підкреслення. Не можна застосовувати крапку. Число
символів не може перевищувати 255. Ім'я не повинно бути
ключовим словом VBA. Вибирати імена змінних слід так,
щоб вони несли в собі інформацію про призначення змінної
і не були довгими.
• Значення змінної - це дані, які зберігаються й
обробляються системою VBA. Спосіб збереження та
оброблення даних залежить від того, до якого типу вони
належать
Типи даних
• Типом даних називається спосіб збереження і подання
даних у комп'ютерній системі, який задає певний формат
або розмір вмісту змінної. Залежно від вмісту розрізняють
змінні різних типів.
• Boolean - Тип даних, що набуває тільки одного з двох
значень: True або False
• Byte - Позитивні числові значення в діапазоні від 0 до 255
• Integer – Цілі числові значення в діапазоні від -32768 до
327676
• Long - Цілі значення в діапазоні, що перевищує діапазон
значень даних типу Integer.
• Date - Містить значення дати і часу.
• Single – Дійсні числові значення з одинарною точністю.
• Double – Дійсні числові значення в діапазоні від із
подвійною точністю
• String – Рядки символів алфавітно-числових даних.
• Variant - Дані будь-якого типу, що використовуються для
елементів, для яких тип даних невідомий.
Оголошення типів
• Під час складання програми мовою Visual BASIC
користувач вирішує сам, треба оголошувати змінну чи ні.
• Для оголошення типу змінної використовується оператор
Dim, який має такий вигляд:
• Dim Ім'я_змінної [As Тип_Даних]
• Наприклад:
• Dim Name As String Dim x, y As Integer Dim Counter As
Single Довжина змінної типу String обмежується лише ОС.
Проте в разі необхідності її можна вказати явно. Для цього
після слова String додають зірочку і максимальне число
символів:
• Dim Ім'я_змінної [As String] [* число_символів]
• Наприклад:
• Dim Street As String* 75
• Після імені змінної можна не задавати її тип. За
замовчуванням Visual BASIC резервує місце під змінну
типу Variant, яка може зберігати дані будь-якого розміру
або формату.
Об’єкти мови VBA
• Range – клітинка або діапазон, наприклад Range(“A9”),
Range(“E5:G9”)
• Властивості: Range("A2").Value – значення в клітинці A2
• Методи: Range("A2").Select - перейти до клітинки A2
• Range(“E5:G9”).Copy – копіювати діапазон E5:G9
• ActiveCell – активна клітинка
• Властивості: ActiveCell.Value – значення в активній клітинці
• ActiveCell.Address – адреса активної клітинки
• ActiveCell.Row – рядок, що включає активну клітинку
• ActiveCell.Offset(m,n).Value – значення в клітинці, що
одержана із активної переміщенням на m клітинок вниз та
на n клітинок вправо
Об’єкти мови VBA
• ActiveCell.Offset(m,n). Address – адреса клітинки, що
одержана із активної переміщенням на m клітинок
вниз та на n клітинок вправо
• Методи: ActiveCell.Offset(m,n).Select – перейти від
активної клітинки на m клітинок вниз та на n клітинок
вправо
• ActiveSheet – активний лист
• ActiveSheet.Paste – вставити скопійований діапазон
на активний лист, починаючи із активної клітинки
• Selection – виділений діапазон
• Selection.copy – копіювати виділений діапазон
• Selection.Delete Shift:=xlUp – видалити діапазон із
переміщенням клітинок вгору
Елементи форми

Властивості елементів форми
• Enabled – доступність
• Приклад: knnext.Enabled = True – кнопка доступна
knnext.Enabled = False – кнопка недоступна
• Locked – блокування
• Приклад: Prof.Locked = True – поле блоковане
Prof.Locked = False – поле не блоковане
• Value – значення
• Приклад: Prof.Value = “Токар”
• Clear – очистити поле або список
• Приклад: Prof_list.Clear
• SetFocus – встановити курсор на об’єкт
• Приклад: Prof_list.SetFocus
• AddItem – включення нового елементу в список
• Приклад: Prof_list. AddItem ActiveCell.Value
Розгалудження в мові VBA
• If Логічний вираз Then
• Оператори
• Else
• Оператори
• End If
• Приклад
• If ActiveCell.Row = 2 Then
• Knprev.Enabled = False
• Knfirst.Enabled = False
• Else
• Knprev.Enabled = True
• Knfirst.Enabled = True
• End If
Цикли в мові VBA
• While Логічний вираз
• Оператори
• Wend

• For змінна=число1 to число2 step число3


• Оператори
• Next

• Do [{While | Until} Логічний вираз]


оператори
Loop

• 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

You might also like