Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Візуал Бейсік 2010 Глінський.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.12 Mб
Скачать

§ 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. створення заготовки електронної таблиці із заголовком табли­ці, заголовками стовпців, розграфленими стовпцями і кноп­кою «Ввести новий запис»;

  2. створення коду макросу і призначення його кнопці «Ввести новий запис»;

  3. створення відповідної форми з полями (для введення даних про ліки) і з кнопками «Ввести в таблицю» запис і «Закрити»;

  4. створення кодів елементів керування форми;

  5. експериментування з проектом на етапі його виконання.

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 ще одну кнопку — «Очистити». Клац­нувши на ній, користувач вилучить дані з полів введення на формі і поверне поля до початкового стану без занесення даних у таблицю. Це корисно у випадку виявлення помилки під час введення даних.