- •Міністерство освіти і науки україни
- •1 Створення програм у середовищі Visual Basic 6.0. Основні поняття - об'єкт, властивість, подія.
- •1.1 Візуальне створення програми
- •1.2 Створення вихідного коду
- •1.3 Контрольні запитання
- •1.4 Практичні завдання
- •1.5 Тест
- •2.1.1 Умовний оператор If
- •If умова Then
- •2 Основні оператори мови
- •2.1 Організація розгалужених обчислювальних процесів
- •2.1.2 Оператор варіанти Select Case
- •2.2 Організація циклічних обчислювальних процесів
- •2.2.1 Оператор циклу For . . . Next
- •Частина початкового рядка циклу Step n може бути пропущена, коли крок зміни перемінної циклу дорівнює одиниці. Приклад використання циклу For … Next
- •2.2.2 Оператор циклу Do While . . . Loop
- •2.2.3 Оператор циклу Do. . . Loop While
- •2.3 Контрольні запитання
- •2.4 Практичні завдання
- •2.5 Тест
- •3 Використання елементів управління в програмах. Робота з формами. Поняття методу
- •3.1 Елементи управління - смуги прокручування, перемикачі, прапорці, групи, списки, що розчиняються
- •3.2 Робота з формами. Поняття методу
- •Приклад програми
- •3.2 Контрольні запитання
- •3.4 Практичні завдання
- •3.5 Тест
- •4 Управління програмою за допомогою меню. Робота з масивами елементів управління, змінних
- •4.1 Управління програмою за допомогою меню
- •4.2 Робота з масивами елементів управління, змінних
- •4.3 Контрольні запитання
- •4.4 Практичні завдання
- •Аналіз стану товарних запасів
- •5 Розробка програм з використанням підпрограм – процедур і функцій, вікон повідомлень
- •5.1 Підпрограми – процедури і функції
- •5.2 Вікна повідомлень
- •Коди сполучень кнопок у вікні повідомлення
- •Коди значків у вікні повідомлення
- •Можливі значення, що повертає функція MsgBox()
- •Приклад програми з використанням підпрограм, вікон повідомлень
- •5.3 Контрольні запитання
- •5.4 Практичні завдання
- •5.5 Тест
- •6 Робота з файлами
- •6.1 Файли довільного доступу
- •6.2 Файли послідовного доступу
- •6.3 Бінарні файли
- •Приклад виконання програми роботи з файлом
- •5.4 Контрольні запитання
- •5.5 Практичні завдання Завдання №1
- •Завдання №2
- •Завдання №3
- •7 Використання Visual Basic for Application у Microsoft Excel
- •7.1 Основні поняття
- •7.2 Редактор vba
- •7.3 Створення функцій користувача
- •7.4 Автоматизація розрахунків на робочому листі
- •7.5 Робота з формами у середовищі vba
- •7.6 Контрольні запитання
- •7.7 Практичні завдання
- •Створити таблицю «Зведення про реалізацію товарів», розрахунок підсумкових значень у який по рядках і в цілому по таблиці виконується за допомогою командної кнопки «Розрахунок».
- •7.8 Тест
- •Література
- •Інформатика та комп’ютерна техніка
Приклад виконання програми роботи з файлом
Як приклад розглядається програма, під час виконання якої можна ввести дані про господарські операції реалізації товарів - дата реалізації, покупець, найменування товару, ціна, кількість. Введені дані можна записати у файл довільного доступу realiz.doc. Форма програми вміщує кнопки для переходу до попереднього, наступного запису файлу. Коли переміщення неможливе - виконано перехід до початку або кінця файлу, видається відповідне повідомлення. Програма також дає змогу додати новий запис до файлу, знищити непотрібні записи файлу.

Рисунок 6.1 - Вид вікна програми для роботи з файлом довільного доступу
На етапі візуальної розробки програми слід створити об'єкти за описом.
|
Об’єкт |
Властивість |
Значення |
|
Форма (Form) |
Name |
frmProgram |
|
Caption |
Програма - приклад | |
|
Font |
Times New Roman, 12 п., напівжирний | |
|
Етикетка (Label) |
Name |
lblDate |
|
Caption |
Дата реалізації: | |
|
Етикетка (Label) |
Name |
lblPok |
|
Caption |
Покупець: | |
|
Етикетка (Label) |
Name |
lblTov |
|
Caption |
Найменування товару: | |
|
Етикетка (Label) |
Name |
lblC |
|
Caption |
Ціна: | |
|
Етикетка (Label) |
Name |
lblK |
|
Caption |
Кількість: | |
|
Текстове поле (TextBox) |
Name |
txtDate |
|
Text |
“_” | |
|
Текстове поле (TextBox) |
Name |
txtPok |
|
Text |
“_” | |
|
Текстове поле (TextBox) |
Name |
txtTov |
|
Text |
“_” | |
|
Текстове поле (TextBox) |
Name |
txtC |
|
Text |
“_” | |
|
Текстове поле (TextBox) |
Name |
txtK |
|
Text |
“_” | |
|
Командна кнопка (CommandButton) |
Name |
cmdNew |
|
Caption |
Новий запис | |
|
Командна кнопка (CommandButton) |
Name |
cmdNext |
|
Caption |
Наступний запис | |
|
Командна кнопка (CommandButton) |
Name |
cmdPrivious |
|
Caption |
Попередній запис | |
|
Командна кнопка (CommandButton) |
Name |
cmdDelete |
|
Caption |
Знищення запису | |
|
Командна кнопка (CommandButton) |
Name |
cmdFin |
|
Caption |
Завершення роботи |
Далі слід у вікні модуля (команда меню Project - Add Module), оголосити новий тип даних:
|
Дані в рядку коду |
Коментар |
|
Type Zap |
|
|
Date As String * 12 |
поле для дати реалізації |
|
Pok As String * 20 |
поле для роботи з найменуванням покупця |
|
Tov As String * 20 |
поле найменування товару |
|
C As String * 10 |
поле ціни |
|
K As String * 10 |
поле кількості |
|
End Type |
|
Програмний код повинен бути таким як у таблиці:
|
Дані в рядку коду |
Коментар |
|
1 |
2 |
|
Option Explicit Dim Z As Zap |
Оголошення змінних є обов'язковим Змінна Z типу Zap буде використана для зчитування даних з файлу, запису інформації в файл |
|
Dim LastRec As Long |
Змінна - покажчик останнього запису файлу |
|
Dim CurRec As Long |
Змінна - покажчик поточного запису файлу |
|
Dim NFile As Integer |
Змінна для збереження номеру відчиненого файлу (дескриптору файлу) |
|
Dim RZ As Long |
Розмір файлу |
|
Private Sub frmProgram _Load() |
Процедура, яка виконується при завантаженні форми (подія Load) |
|
RZ = Len(Z) |
Значення змінної RZ буде дорівнювати розміру змінної - запису Z, значення отримано функцією Len() |
|
NFile = FreeFile |
Змінна Nfile отримує значення номеру вільного в дану мить файлу |
|
Open "realiz.doc" For Random As NFile Len = RZ |
Відчиняється файл realiz.doc, що міститься в поточній папці, у режимі довільного доступу (Random) як файл з номером Nfile і розміром запису RZ. Якщо файл не буде знайдено, система його створить і відкриє. |
|
CurRec = 1 |
Покажчик поточного запису CurRec отримує значення 1. |
|
LastRec = FileLen("realiz.doc") / RZ |
Покажчик останнього запису LastRec отримує значення - розмір файлу "realiz.doc", що визначається за допомогою функції FileLen(), який буде поділено на довжину запису RZ. |
|
If LastRec = 0 Then |
Якщо номер останнього запису дорівнює 0, то |
|
LastRec = 1 |
змінній LastRec привласнюється значення 1 |
|
End If |
Кінець оператору If |
|
ShowZ |
Виклик процедури ShowZ для виведення у вікні вмісту поточного запису файлу. |
|
End Sub |
Кінець процедури. |
|
1 |
2 |
|
Public Sub ShowZ() |
Процедуру для зчитування запису з файлу і виведення даних у формі слід створити за допомогою команди меню Tools - Add Procedure. |
|
Get #NFile, CurRec, Z |
Оператором зчитується поточний запис CurRec файлу з номером NFile у змінну Z. |
|
txtDate.Text = Trim(Z.Date) |
Властивості Text текстового поля txtDate для роботи з датою привласнюється значення поля Date змінної Z. Функція Trim() знищує пробіли у кінці текстового рядка. |
|
txtPok.Text = Trim(Z.Pok) |
Властивості Text текстового поля txtPok для виведення, редагування найменування покупця привласнюється значення поля Pok змінної Z. |
|
txtTov.Text = Trim(Z.Tov) |
Властивості Text текстового поля txtTov для роботи з найменуванням товару привласнюється значення поля Tov змінної Z. |
|
txtC.Text = Trim(Z.C) |
Властивості Text текстового поля txtC для виведення, редагування ціни товару привласнюється значення поля C змінної Z. |
|
txtK.Text = Trim(Z.K) |
Властивості Text текстового поля txtK для роботи з кількістю товару привласнюється значення поля K змінної Z. |
|
frmProgram.Caption = "Запис " + Str(CurRec) + " / " + Str(LastRec) |
У заголовку вікна програми виводиться: Запис <номер поточного запису> / <загальна кількість записів у файлі> |
|
End Sub |
Кінець процедури. |
|
Public Sub SaveZ() |
Процедура буде виконувати запис даних у файл. |
|
Z.Date = txtDate.Text |
Полю Date змінної Z привласнюється значення властивості Text об'єкту txtDate, яке може бути введено, відредаговано. |
|
Z.Pok = txtPok.Text |
Полю Pok змінної Z привласнюється значення властивості Text об'єкту txtPok. |
|
Z.Tov = txtTov.Text |
Полю Tov змінної Z привласнюється значення властивості Text об'єкту txtTov. |
|
Z.C = txtC.Text |
Полю C змінної Z привласнюється значення властивості Text об'єкту txtC. |
|
Z.K = txtK.Text |
Полю K змінної Z привласнюється значення властивості Text об'єкту txtK. |
|
Put #NFile, CurRec, Z |
Запис у файл realiz.doc (файл з номером Nfile) у запис з номером CurRec умісту змінної Z. |
|
End Sub |
Кінець процедури. |
|
1 |
2 |
|
Private Sub cmdNew_Click() |
Процедуру буде виконано, якщо клацнути на кнопці Новий запис. |
|
SaveZ |
Виконання процедури SaveZ - збереження у файл поточного запису файлу. |
|
LastRec = LastRec + 1 |
Покажчик останнього запису файлу LastRec збільшується на 1. |
|
Z.Date = " " |
Знищується вміст полів змінної - запису Z |
|
Z.Pok = " " |
|
|
Z.Tov = " " |
|
|
Z.C = " " |
|
|
Z.K = " " |
|
|
Put #NFile, LastRec, Z |
До файлу додається новий запис (запис з номером LastRec) зі змінної Z. |
|
CurRec = LastRec |
Покажчик поточного запису приймає значення LastRec. |
|
ShowZ |
Виконується процедура ShowZ - виведення вмісту поточного запису файлу у вікні програми. |
|
End Sub |
Кінець процедури. |
|
Private Sub cmdNext_Click() |
Процедуру буде виконано, якщо клацнути на кнопці Наступний запис. |
|
If CurRec = LastRec Then |
Якщо покажчик поточного запису CurRec дорівнює покажчику останнього запису LastRec, то |
|
Beep |
видається звуковий сигнал |
|
MsgBox "Кiнець файлу!", vbOKOnly + vbExclamation |
на екрані з'являється вікно повідомлення, що вже досягнуто кінця файлу (тобто перехід до наступного запису неможливий) |
|
Else |
інакше |
|
SaveZ |
виконується процедура SaveZ збереження даних, що введено або відредаговано у вікні програми, у поточному записі файлу |
|
CurRec = CurRec + 1 |
покажчик поточного запису збільшується на одиницю |
|
ShowZ |
виконується процедура ShowZ зчитування запису CurRec з файлу і виведення інформації, що отримана, у вікні програми |
|
End If |
кінець оператору If. |
|
txtDate.SetFocus |
Текстове поле txtDate отримує фокус - поле стає активним, курсор буде розташовано в полі. |
|
End Sub |
Кінець процедури. |
|
1 |
2 |
|
Private Sub cmdPrivious_Click() |
Процедуру буде виконано, якщо клацнути на кнопці Попередній запис. |
|
If CurRec = 1 Then |
Якщо покажчик поточного запису CurRec дорівнює одиниці, то |
|
Beep |
виводиться звуковий сигнал |
|
MsgBox "Початок файлу!", vbOKOnly + vbExclamation |
на екрані з'являється вікно повідомлення, що вже досягнуто початку файлу, перехід до попереднього запису неможливий |
|
Else |
інакше |
|
SaveZ |
зберігається поточний запис у файлі за допомогою процедури SaveZ |
|
CurRec = CurRec - 1 |
покажчик поточного запису зменшується на 1 |
|
ShowZ |
виконується процедура ShowZ зчитування запису CurRec з файлу і виведення інформації, що отримана, у вікні програми |
|
End If |
кінець оператору If. |
|
txtDate.SetFocus |
Передача фокусу текстовому полю txtDate. |
|
End Sub |
Кінець процедури. |
|
Private Sub cmdDelete_Click() |
Процедуру буде виконано, якщо клацнути на кнопці Знищення запису. |
|
Dim TmpNFile |
Оголошення локальної змінної для збереження номеру тимчасового файлу, використовується для перезапису інформації під час знищення записів |
|
Dim TmpZ As Zap |
Оголошення змінної TmpZ типу Zap |
|
Dim RecN As Long |
Оголошення змінної RecN для роботи з номером запису файла realiz.doc. |
|
Dim TmpRecN As Long |
Оголошення змінної TmpRecN для роботи з номером запису тимчасового файлу |
|
If MsgBox("Знищити запис?", vbYesNo) = vbNo Then |
Якщо у
вікні повідомлення
|
|
txtDate.SetFocus |
Текстове поле txtDate отримує фокус. |
|
Exit Sub |
Процедура завершує свою роботу. |
|
End If |
Кінець оператору If. |
|
If Dir("realiz.tmp") = "realiz.tmp" Then |
Якщо у поточному каталозі знайдено тимчасовий файл realiz.tmp, то |
|
Kill "realiz.tmp" |
файл realiz.tmp знищується |
|
End If |
Кінець оператору If. |
|
TmpNFile = FreeFile |
Змінна TmpNFile отримує номер вільного файлу |
|
Open "realiz.tmp" For Random As TmpNFile Len = RZ |
Розчиняється тимчасовий файл як файл довільного доступу з номером файлу TmpNFile і довжиною запису RZ. |
|
RecN = 1 |
Змінна RecN отримує значення 1 |
|
TmpRecN = 1 |
Змінна TmpRecN отримує значення 1 |
|
Do While RecN < LastRec + 1 |
Цикл діє доки RecN < LastRec + 1 (LastRec - номер останнього запису файлу realiz.doc) |
|
If RecN <> CurRec Then |
Якщо номер запису файлу realiz.tmp не дорівнює номеру поточного запису файлу realiz.doc (запис, що знищується), то |
|
Get #NFile, RecN, TmpZ |
у змінну TmpZ зчитується запис файлу realiz.doc з номером RecN |
|
Put #TmpNFile, TmpRecN, TmpZ |
записується запис з номером TmpRecN у файл realiz.tmp |
|
TmpRecN = TmpRecN + 1 |
змінна TmpRecN збільшується на 1 |
|
End If |
Кінець оператору If. |
|
RecN = + 1 |
Змінна RecN збільшується на 1 щоразу крім ітерації циклу коли обробляється запис з номером CurRec - той, що слід знищити. |
|
Loop |
Кінець оператору циклу. |
|
Close NFile |
Зачиняється файл realiz.doc. |
|
Kill "realiz.doc" |
Знищується файл realiz.doc. |
|
Close TmpNFile |
Зачиняється файл realiz.tmp. |
|
Name "realiz.tmp" As "realiz.doc" |
Перейменовується файл realiz.tmp у файл realiz.doc. |
|
NFile = FreeFile |
Визначається номер вільного файлу |
|
Open "realiz.doc" For Random As NFile Len = RZ |
Розчиняється файл realiz.doc, що міститься в папці диску С:, у режимі довільного доступу (Random) як файл з номером Nfile і розміром запису RZ. Якщо файл не буде знайдено, система його створить і розчинить. |
|
LastRec = LastRec - 1 |
Зменшується значення покажчика останнього запису файлу LastRec оскільки один запис знищено. |
|
If LastRec = 0 Then LastRec = 1 |
Якщо LastRec = 0 (у файлі не залишилось записів), то LastRec привласнюється значення 1. |
|
If CurRec > LastRec Then |
Якщо покажчик поточного запису файлу виходить за межи файлу, то |
|
CurRec = LastRec |
йому привласнюється значення LastRec |
|
End If |
Кінець оператору If. |
|
ShowZ |
Виконується процедура ShowZ зчитування запису CurRec з файлу і виведення інформації, що отримана, у вікні програми |
|
txtDate.SetFocus |
Передача фокусу текстовому полю txtDate. |
|
End Sub |
Кінець процедури. |
|
Private Sub cmdFin_Click() |
Процедуру буде виконано, якщо клацнути на кнопці Завершення роботи. |
|
SaveZ |
Збереження даних у поточному записі файлу. |
|
Close #NFile |
Зачинення файлу realiz.doc. |
|
End |
Кінець програми. |
|
End Sub |
Кінець процедури. |

обрано кнопкуНет,
то