- •Методичні вказівки
- •Мовою Visual Basic for Application (vba)”
- •6.040303 Системний аналіз
- •1 Лабораторна робота №1
- •1.1 Теоретичні відомості
- •1.1.1 Функція InputBox
- •1.1.2 Процедура MsgBox
- •Текст процедури
- •Текст процедури
- •Результати роботи програми
- •2 Лабораторна робота №2
- •2.1 Створення макросів
- •2.2 Об’єкт Range, його властивості та методи
- •2.2.1 Деякі властивості
- •2.2.2 Деякі методи
- •2.3 Контрольні питання.
- •3.1.2 Оператор циклу по сімейству об'єктів.
- •3.1.3 Оператори циклу з умовою.
- •3.2 Контрольні питання.
- •3.3 Індивідуальні завдання
- •4 Лабораторна робота №4
- •4.1 Функції користувача
- •Текст програми – функції
- •Текст процедури для виклику функції
- •4.2 Процедури користувача
- •4.3 Контрольні питання
- •4.4 Індивідуальні завдання
- •5 Лабораторна робота №5
- •5.1 Створення нової форми
- •5.2 Деякі властивості та події елементів управління
- •5.3 Створення списків
- •5.4 Створення інтерфейсу користувача
- •Програмний код для кнопки CommandButton1 (подія Click)
- •Програмний код для кнопки CommandButton2 (подія Click)
- •5.5 Контрольні питання
- •5.6 Завдання
- •6 Лабораторна робота №6
- •6.1 Введення та виведення масивів
- •6.2 Контрольні питання
- •6.3 Індивідуальні завдання
- •Література
5.4 Створення інтерфейсу користувача
Задача 5.2 Створити форму для реєстрації абітурієнтів.
Рисунок 5.2 – Приклад роботи форми
Розмістимо на формі список ListBox1, перемикачі OptionButton1 та OptionButton2, текстове поле TextBox1, потрібні написи та дві командні кнопки CommandButton1 та CommandButton2.
Заповнення списку будемо здійснювати будь-яким з наведених раніше способів. Для перемикача OptionButton1 встановимо значення властивості Value = True, він буде вибраний за замовчанням на формі, а перемикач OptionButton2 прийме значення False.
Для командних кнопок задамо властивості Caption – Записати та Відмінити відповідно і створимо програмні коди.
Програмний код для кнопки CommandButton1 (подія Click)
Private Sub CommandButton1_Click( )
‘ кнопка Записати
Dim f As String , fam As String , forma As String
Dim i As Integer
f = ListBox1.Value ‘ факультет
fam = TextBox1.Value ‘ прізвище
If OptionButton1.Value = True Then
forma = "бюджет"
Else
forma = "контракт"
End If
Worksheets("Список") . Activate
Range("A2") . Select
i = 2
‘ Пошук вільного рядка
Do While Cells( i , 1) . Value > ""
i = i + 1
Loop
‘ Запис даних з форми на Лист
Cells(i, 1) . Value = f
Cells(i, 2) . Value = fam
Cells(i, 3) . Value = forma
End Sub
Програмний код для кнопки CommandButton2 (подія Click)
Private Sub CommandButton2_Click()
' кнопка Відмінити
UserForm1 . Hide
End Sub
Рисунок 5.3 – Виведення на Лист Excel
5.5 Контрольні питання
Елемент керування текстове поле, його властивості.
Елемент керування командна кнопка, його властивості і події.
Елементи керування список і список, що розкривається, їхнє призначення, властивості і події, що з ними зв'язані.
Елемент керування перемикач, його властивості і події, що з ним зв'язані. Об'єднання перемикачів у групу.
5.6 Завдання
1) Створіть форми для введення, виведення даних та розв’язування тих трьох задач, що Ви виконували в лабораторній роботі.№1 з VBA. При створенні форм використовуйте елементи керування текстове поле та командна кнопка.
2) Створіть форму для введення нових даних до списку, який Ви створили за індивідуальним завданням у лабораторній роботі №1 з Excel.
Форма повинна викликатися натисканням на кнопку, вбудовану на робочий Лист поруч зі списком, або розміщену на панелі інструментів. У формі повинні використовуватись такі елементи управління: текстові поля, список, що розкривається, перемикачі та командні кнопки. Програма, призначена на кнопку, повинна знаходити перший вільний рядок наприкінці списку на Листі і заносити в нього дані з елементів управління форми. Величини, які розраховувалися на Листі Excel за формулами, повинні бути обчислені в програмі за допомогою функцій і виведені на Лист Excel.
6 Лабораторна робота №6
Тема: Робота з масивами.
Мета роботи: навчитися створювати програми, які використовують масиви, вводити масиви та виводити їх на формі.
6.1 Введення та виведення масивів
Масив – це множина послідовних пронумерованих об’єктів однакового типу, що мають одне і те саме базове ім’я. Кожен окремий об’єкт, що належить до масиву, позначається як змінна з індексом. Для доступу до цієї змінної застосовується її номер (індекс).
Кожен масив, який використовується у програмі, повинен мати свій опис за допомогою оператору Dim. Інколи при об’явленні масиву його розмір невідомий. Тоді треба об’являти динамічний масив без зазначення розміру. Під час виконання програми його розмір змінюють за допомогою оператора ReDim, після якого вказується ім’я та реальний розмір масиву. Наприклад,
Dim n As Integer
Dim x( ) As Single , y ( ) As Single
n = InputBox(“Введіть розмірність масиву”)
ReDim x(n) As Single , y (n , n) As Single
Введення, виведення та обробка масивів виконується в циклі, який організується за зміною індексу. Для обробки елементів двовимірного масиву (матриці) необхідно написати два вкладених цикли, які змінюють перший та другий індекси матриці.
Задача 6.1 Ввести з клавіатури двовимірний масив чисел розміру N*N та вивести його на формі.
Створимо форму та розмістимо на ній потрібні елементи управління (див. рис. 6.1).
Label 1 ––––→ ←–––– txtN
cmdRun ––––––––→
Label 2 –→
←– CmdExit
txtX –––––––––––––→
Рисунок 6.1 – Форма для виведення елементів масиву
Щоб забезпечити виведення елементів масиву у вигляді прямокутної таблиці, для текстового поля txtХ , в якому записуються значення елементів масиву, встановимо на етапі проектування форми властивості
WordWrap = True та MultiLine = True
Надамо елементам управління властивості згідно таблиці 6.1.
Таблиця 6.1 – Значення властивостей елементів управління
Тип елемента управління |
Ім’я елемента управління |
Назва властивості |
Значення властивості |
Форма |
UserForm1 |
Caption |
Двовимірний масив |
Напис |
Label 1 |
Caption |
Введіть розмірність масиву Х |
Напис |
Label 2 |
Caption |
Масив Х |
Командна кнопка |
CmdRun |
Caption |
Введіть елементи масиву |
Командна кнопка |
CmdExit |
Caption |
Вихід |
Текстове поле |
txtX |
MultiLine |
True |
WordWrap |
True |
При написанні коду для виведення елементів масиву у вигляді прямокутної таблиці використовуємо константу Visual Basic – vbCrLf, яка виконує функції комбінації кодів Chr(10) + Chr(13), тобто Кінець рядка та Перехід на новий рядок.
Програмний код для кнопки cmdRun (подія Click)
Private Sub cmdRun_Click()
' Кнопка Введіть елементи масиву
Dim n As Integer
Dim i As Integer, j As Integer
Dim x( ) As Single
txtX .Value = ""
n = CInt(txtN .Value)
ReDim x (n , n) As Single
For i = 1 To n
For j = 1 To n
x( i , j) = InputBox("Введіть x (" & CStr(i) & "," & CStr(j) & ")")
txtX .Value = txtX .Value & CStr(x(i , j)) & " "
Next j
txtX .Value = txtX .Value & vbCrLf
Next i
End Sub
Програмний код для кнопки CmdExit (подія Click)
Private Sub CmdExit_Click()
' Кнопка Вихід
UserForm1 . Hide
End Sub
Результати роботи програми зображені на рис. 6.2.
Рисунок 6.2 – Приклад виведення масиву
Задача 6.2 Переставити рядки двовимірного масиву цілих чисел, що має M рядків та N стовпців з максимальною та мінімальною сумою непарних елементів. Вважати, що ці суми єдині..
Для перевірки парності використаємо функцію mod, яка обчислює залишок від ділення двох чисел. Для непарних чисел: x mod 2=1
Позначення:
min – мінімальна сума непарних елементів по рядках,
k_min – номер рядка, який її містить;
max – максимальна сума непарних елементів по рядках,
k_max – номер рядка з цією сумою.
Для обміну значеннями елементів використаємо змінну t. Для підрахунку суми використаємо змінну S. Підрахунок max і min почнемо зі значень 32000 та –32000, які не можуть дорівнювати результату.
Створимо форму як на рисунку 6.3.
Розмістимо на формі елемент управління напис – LblRez. На етапі проектування встановимо його властивість LblRez.Caption = " " . В програмі напишемо код, який розміщує на його місці інформацію про те, які рядки поміняли місцями.
←–––– txtM
←–––– txtN
cmdRun–––––––→
txtA––––→
LblRez ––––––→
←––––––––––– CmdExit
Рисунок 6.3 – Приклад роботи форми
Програмний код для кнопки cmdRun (подія Click)
Private Sub cmdRun_Click()
' Кнопка Пуск
Dim m As Integer , n As Integer
Dim min As Integer , max As Integer
Dim i As Integer , j As Integer
Dim k_min As Integer , k_max As Integer
Dim t As Integer , s As Integer
Dim a( ) As Integer
txtA .Value = ""
txtRez .Value = ""
m = CInt(txtM .Value)
n = CInt(txtN .Value)
ReDim a(m , n) As Integer
For i = 1 To m
For j = 1 To n
' Введення елементів масиву
a(i, j) = InputBox("Введіть елемент a(" & CStr(i) & "," & CStr(j) & ")")
' Виведення елементів першого масиву
txtA .Value = txtA .Value & CStr(a(i , j)) & " "
Next j
txtA .Value = txtA .Value & vbCrLf
Next i
' Знаходження суми елементів в рядку,
' максимальної та мінімальної суми
min = 32000 : max = –32000
For i = 1 To m
s = 0
For j = 1 To n
If a(i , j) Mod 2 = 1 Then s = s + a(i , j)
Next j
If min > s Then
min = s : k_min = i
End If
If max < s Then
max = s : k_max = i
End If
Next i
For j = 1 To n
t = a(k_min , j)
a(k_min , j) = a(k_max , j)
a(k_max , j) = t
Next
' Виведення елементів перетвореного масиву
For i = 1 To m
For j = 1 To n
txtRez .Value = txtRez .Value & CStr(a(i , j)) & " "
Next j
txtRez .Value = txtRez .Value & vbCrLf
LblRez .Caption = "Міняємо місцями " & Str(k_min) & " та " & _
Str(k_max) & " рядки"
Next i
End Sub
Програмний код для кнопки CmdExit (подія Click)
Private Sub CmdExit_Click()
' Кнопка Вихід
UserForm1 . Hide
End Sub