- •§ 1. Поняття про інформаційне моделювання
- •Опорний конспект
- •§ 2. Етапи розв’язання задач на комп’ютері
- •§ 3. Середовища розробки проектів
- •§ 4. Властивості елементів керування
- •§ 1. Поняття про інформаційне моделювання 2
- •Контрольна робота № 1
- •§ 5. Створення проектів
- •§ 6. Основні поняття мови програмування
- •9. Процедура кнопки «Обчислити» для задачі про калькулятор.
- •§ 7. Алгоритм та його властивості
- •Запитання
- •§ 8. Різновиди алгоритмів
- •Запитання
- •§ 9. Типи даних
- •§ 10. Лінійні програми
- •Запитання та вправи
- •Контрольна робота № 2
- •§11. Введення даних і виведення результатів
- •§ 12. Текстові файли даних
- •§ 13. Програми з розгалуженням
- •§ 1. Поняття про інформаційне моделювання 2
- •Запитання
- •§ 14. Елементи керування прапорці і перемикачі
- •§ 15. Алгоритмічна конструкція вибір
- •Контрольна робота № 3
- •§ 16*. Списки
- •§ 17. Підпрограми. Функції користувача
- •§ 18. Підпрограми. Процедури користувача
- •§ 19. Цикли. Цикл з параметром
- •§ 20. Задачі пошуку даних. Цикл «доки»
- •§ 21. Застосування циклів
- •Контрольна робота № 4
- •Розділ 2. Складені структури даних
- •§ 22. Одновимірні масиви. Створення масивів
- •§ 23. Пошук даних в одновимірному масиві
- •1. Пошук даних у масиві за заданим критерієм.
- •5. Проект «На метеостанції». Застосування масивів і процедур користувача у vb.
- •§ 24. Впорядкування одновимірного масиву
- •§ 1. Поняття про інформаційне моделювання 2
- •4. Моделювання предметних областей за допомогою масивів.
- •§ 25. Двовимірні масиви. Створення масивів
- •§ 26*. Опрацювання двовимірних масивів
- •1. Елементи керування DataGridView (vb) та DataGrid (vba).
- •Контрольна робота № 5
- •§ 27. Опрацювання текстових даних
- •§ 28. Структури даних (записи)
- •§ 1. Поняття про інформаційне моделювання 2
- •§ 29. Файли даних прямого доступу
- •5. Vb. Команди для роботи з файлами даних прямого доступу.
- •§ 30. Застосування файлів даних послідовного доступу
- •§ 31. Графіка у vb
- •§ 32. Поняття про об’єктно-орієнтоване програмування
- •Розділ 3. Задачі
- •Складніші задачі*
- •Розділ 4. Vba у програмах пакету ms office
- •§ 33. Застосування vba у ms word
- •§ 34. Vba у програмі ms excell
- •§ 35. Задача про облік товарів на складі
- •§ 36. Розв’язування математичних задач
- •§ 37. Робота 3 базами даних
- •Список літератури
- •§ 1. Поняття про інформаційне моделювання 2
§ 35. Задача про облік товарів на складі
Найпоширеніше застосування VBA у MS Excell — це створення форм для зручного введення значної кількості різнотипних даних в електронну таблицю.
1. Постановка задачі. Розробити проект (рис. 4.6) для зручного введення даних у електронну таблицю MS Excel (рис. 4.8), яка мас містити інформацію про деякі товари, що зберігаються на складі. Як предметну область розглянемо аптечний склад.
Рис. 4.6. Вікно проекту Рис. 4.7. Вікно форми
Заповнювати форму (рис. 4.6) працівникам аптеки набагато зручніше, ніж заповнювати електронну таблицю (див. рис. 4.8).
2. Теоретичні відомості про елементи керування. Етап конструювання форми відображено на рис. 4.7. Для розв’язування задачі застосовано традиційні елементи керування, зокрема, написи, текстові поля, кнопки, перемикачі, випадний список (ComboBox) і новий елемент керування — лічильник (SpinButton).
Рис. 4.8. Електронна таблиця
Нагадаємо принципи роботи зі списком. Номер даного зі списку міститься у властивості ListIndex об’єкта ComboBox. Нумерація елементів списку починається з нуля. Якщо ListIndex = -1, то елемент списку не вибрано. У цьому випадку користувач може ввести власне значення елемента списку, яке зберігатиметься у властивості Text. Атрибут List (список) цього об’єкта є масивом елементів з текстовими даними. Ця властивість разом із записаними у круглих дужках індексами рядка і стовпця масиву дає доступ до відповідного елемента випадного списку.
Розглянемо приклад списку з трьома елементами:
ComboBox1.List =Array("Елемент 0", "Елемент 1", "Елемент 2")
a = ComboBox1.List(1, 0) 'а = "Елемент 1"
ComboBox1.ListIndex = 2 'робимо активним третій елемент.
Лічильник
SpinButton
(піктограма
панелі
Toolbox,
інша
назва — кнопка корекції) призначений
для зміни деякого цілочислового значення
під час роботи програми на деякий крок.
Властивості цього елемента такі:
Властивість |
Опис властивості |
Значення |
Value |
Поточне число |
Ціле число |
Мах |
Максимальне значення |
Ціле число |
Міn |
Мінімальне значення |
Ціле число |
SmallChange |
Крок зміни значення |
Ціле число |
Visible |
Видимість об’єкта |
True, False |
3. Розв’язування задачі. Розв’язування задачі складатиметься з декількох етапів:
створення заготовки електронної таблиці із заголовком таблиці, заголовками стовпців, розграфленими стовпцями і кнопкою «Ввести новий запис»;
створення коду макросу і призначення його кнопці «Ввести новий запис»;
створення відповідної форми з полями (для введення даних про ліки) і з кнопками «Ввести в таблицю» запис і «Закрити»;
створення кодів елементів керування форми;
експериментування з проектом на етапі його виконання.
1. Відкриємо електронну таблицю MS Excell і створимо таблицю (див. рис. 4.8), не вводячи конкретних даних про товари. Вставимо кнопку і підпишемо її «Ввести новий запис».
2. Створимо макрос з назвою ShowForm, в заготовку коду якого вставимо одну команду UserForml.Show. Ця команда після запуску макросу відкриє на екрані вікно «Введення інформації в таблицю бази даних», за допомогою якого користувач керуватиме подальшими процесами. Макрос призначимо кнопці «Ввести новий запис», що є в електронній таблиці.
3. Перейдемо у вікно VBA, вставимо у проект форму UserForml і підпишемо її заголовок: «Введення інформації в таблицю бази даних». Наповнимо форму елементами керування, як показано на рис. 4.6. Зверніть увагу, поле TextBox2 розташовують поряд з лічильником SpinButtonl так, щоб складалася ілюзія, що це один елемент.
4. Задамо властивості елементів керування на формі і складемо коди реакцій на події. Виконаємо такий алгоритм.
4.1. Крок зміни терміну зберігання ліків задамо 6 (місяців). Для цього змінимо відповідну властивість SmallChange об’єкта SpinButtonl.
4.2. Запрограмуємо зміну значення TextBox2 як реакцію на подію клацання на кнопці SpinButtonl. Для цього двічі клацнемо в конструкторі форми на лічильнику і в заготовку процедури SpinButton1_- Change() вставимо одну команду. Уся процедура матиме такий вигляд:
Private Sub SpinButton1_Change()
TextBox2.Text = CStr(SpinButton1.Value)
End Sub
4.3. Передбачимо можливість введення значення в поле TextBox2 «вручну», тому запишемо таке значення як поточне значення лічильника. Для цього двічі клацнемо на полі TextBox2 і забезпечимо такий вигляд процедури TextBox2_Change():
Private Sub TextBox2_Change()
SpinButton1.Value = CInt(TextBox2.Text)
End Sub
4.4. Занесемо у список ComboBox1 елементи з назвами груп товарів на етапі відкривання форми за допомогою функції Array. Для цього двічі клацнемо на формі, змінимо подію Click на Initialize і введемо потрібну команду у заготовку:
Private Sub UserForm_lnitialize()
ComboBox1.List = Array("Вітаміни", "Анальгетики", _
"Серцеві ЛЗ", "Гормони", "Нейролептики", _
"Послаблюючі", "Інші")
End Sub
4.5. Запрограмуємо кнопку «Ввести в таблицю». Вона призначена для занесення даних з форми в ЕТ. Використаємо функцію CountA, яка стосовно деякого діапазону повертає ціле число — кількість непорожніх клітинок у цьому діапазоні.
Private Sub CommandButton1_Click()
Dim nazva, sert, vidp, pryjm, grupa, najav As String
Dim termin, kilk, n As Integer
'Знаходимо перший незаповнений рядок таблиці:
n = Application.WorksheetFunction._
CountA(ActiveSheet.Columns(1)) + 1
'Зчитуємо дані з форми введення:
nazva = TextBox1.Text
If CheckBox1.Value = True Then sert = "Так" Else sert = "Hi"
If CheckBox2.Value = True Then vidp = "Так" Else vidp = "Hi"
If CheckBox3.Value = True Then pryjm = "Так" Else pryjm = "Hi"
If ComboBox1.ListIndex > -1 Then
grupa = ComboBox1.List(ComboBox1.ListIndex, 0)
Else
grupa = ComboBox1.Text
End If
If OptionButtonl.Value = True Then
najav = "Так"
Else
najav = "Hi"
End If
'Перетворюємо деякі вхідні дані у числові
termin = CInt(TextBox2.Value)
kilk = Clnt(TextBox3.Value)
'Записуємо дані зі змінних у таблицю Excel:
Cells(n, 1).Value = n
Cells(n, 2).Value = nazva
Cells(n, 3).Value = sert
Cells(n, 4).Value = vidp
Cells(n, 5).Value = pryjm
Cells(n, 6).Value = grupa
Cells(n, 7).Value = najav
Cells(n, 8).Value = termin
Cells(n, 9).Value = kilk
'Готуємо форму для введення наступних даних:
TextBox1.Text = '"'
Text Boх2.Text = "36"
TextBox3.Text = "1"
CheckBox1.Value = True
CheckBox2.Value = True
CheckBox3. Value = True
OptionButtonl.Value = True
End Sub
4.6. У заготовку коду кнопки «Закрити» введемо одну команду — End.
5. Повернемося в таблицю MS Excel, збережемо її і перевіримо роботу макросу. Для цього клацнемо на кнопці «Ввести в таблицю» і введемо дані про чотири-шість товарів (див. рис. 4.8), зазначаючи різні групи лікарських засобів і терміни їх зберігання і не залишаючи порожніх полів. Термін зберігання товару задаватимемо за допомогою лічильника або «вручну». Після введення потрібної кількості даних закриємо форму і перевіримо правильність введених даних в електронній таблиці.
Висновок. Застосування форм і VBA автоматизує, унаочнює і полегшує процеси введення даних в електронні таблиці і бази даних.
Вправи
1. Беручи таблицю на рис. 4.8 за еталон, придумайте власну предметну область, групи товарів і їхні назви і реалізуйте вищеописаний проект. Для цього на рівні кодів треба лише змінити назви груп товарів у списку ComboBox1.
2. Модифікуйте проект, вставивши у форму текстове поля з підписами «Виробник» та список ComboBox2 з підписом «Постачальник». Придумайте назви чотирьох постачальників, які введіть у ComboBox2 у процедурі UserForm initialize. Модифікуйте процедуру CommandButtonl_Click, щоб взяти до уваги нові дані, і змініть вигляд електронної таблиці, додавши відповідні два стовпці.
3. Додайте до форми UserForm1 ще одну кнопку — «Очистити». Клацнувши на ній, користувач вилучить дані з полів введення на формі і поверне поля до початкового стану без занесення даних у таблицю. Це корисно у випадку виявлення помилки під час введення даних.
