- •7.050105 “Банківська справа”, 7.050104 “Фінанси”
- •Донецьк 2005
- •1 Створення програм у середовищі Visual Basic 6.0. Основні поняття - об'єкт, властивість, подія.
- •1.1 Візуальне створення програми
- •1.2 Створення вихідного коду
- •1.3 Контрольні запитання
- •1.4 Практичні завдання
- •1.5 Тест
- •2 Основні оператори мови
- •2.1 Організація розгалужених обчислювальних процесів
- •2.1.1 Умовний оператор If
- •If умова Then
- •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 Практичні завдання
- •Картка кількісного обліку товарів
- •Аналіз виконання плану товарообігу за структурою
- •Відомість розрахунків покупців по кредитах
- •Відомість результатів інвентаризації товарів
- •Рахунок-фактура
- •Відомості про вибірку фондів по плодоовочевим культурам за декаду
- •Відомість залишків основних фондів
- •Реєстр листків по тимчасовій непрацездатності
- •Відомість відрахувань із зарплати
- •Меню на відпустку харчування співробітникам столової
- •Аналіз забезпеченості кадрами
- •4.5 Тест
- •5 Розробка програм з використанням підпрограм – процедур і функцій, вікон повідомлень
- •5.1 Підпрограми – процедури і функції
- •5.2 Вікна повідомлень
- •Коди сполучень кнопок у вікні повідомлення
- •Коди значків у вікні повідомлення
- •Приклад програми з використанням підпрограм, вікон повідомлень
- •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 Тест
- •Література
- •7.050105 “Банківська справа”, 7.050104 “Фінанси”
Приклад виконання програми роботи з файлом
Як приклад розглядається програма, під час виконання якої можна ввести дані про господарські операції реалізації товарів - дата реалізації, покупець, найменування товару, ціна, кількість. Введені дані можна записати у файл довільного доступу 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 |
Кінець процедури. |