![](/user_photo/2706_HbeT2.jpg)
- •Лабораторная работа №1. «Знакомство со средствами html и css».
- •Лабораторная работа №2. «Работа с управляющими структурами vba».
- •Лабораторная работа №3. «Операторы повторения (циклы). Итеративные методы вычислений».
- •Лабораторная работа № 4. «Работа с файлами».
- •Лабораторная работа №5. « Работа с формами vba и сложными типами данных».
Лабораторная работа №5. « Работа с формами vba и сложными типами данных».
Цель: С помощью программных средств VBA создать мини-СУБД, используя заданную вариантом структуру данных.
Постановка задачи: Программа должна уметь выполнять следующие функции:
при загрузке показывать заставку (сведения о программе, разработчике);
работать в интерактивном режиме с простым и дружественным интерфейсом;
вводить новые данные в СУБД;
осуществлять вывод данных по избранным объектам на экран в заданном порядке;
изменять избранные элементы выбранного объекта;
сохранять изменения данных в дисковом файле при завершении работы;
производить чтение данных из дискового файла;
при необходимости завершать работу без сохранения измененных данных.
Для следующего типа данных:
Для создания формы в VBA достаточно открыть редактор VBA и из выпадающего меню «Вставки» выбрать «UserForm», что добавить форму в существующий проект и позволит работать с формой режиме «WYSIWYG».
Добавление формы.
Работа с формой в режиме «WYSIWYG».
Программа добавления / изменения записей в БД:
'Записываем значения соотв. текстовых полей в соотв. ячейки листа документа
Private Sub NewAdd_Button_accept_Click()
Dim i As Integer
For i = 1 To 9 'в соотв. с кол/вом столбцов строки
Cells(Chosen_Cell, i) = frmNewAdd.Controls("TextBox" & i).Value 'позволяет передать значение поля в соотв. с его типом
Next i
Call countCurRows 'получаем текущее кол/во записей в БД
ChoiceTheCell.AddItem (countRows + 6) 'добавляем новую строку в список для добавления записи
End Sub
Блок схема программы.
Программа поиска данных в БД:
'Обработчик кнопки "Искать" на форме поиска
Private Sub FindAccept_Click()
Dim i As Integer 'итерационная пременная
Dim iValue As String 'храним ввод с экрана для "поиска по значению"
If FindMethod1.Value = True Then 'Если пользователь выбрал первый метод поиска
For i = 6 To countRows + 5
If i < FindFrom Then
rows(i).Hidden = True 'Скрытие ячеек исключенных при выборочном просмотре
ElseIf i > FindTo Then
rows(i).Hidden = True
End If
Next i
End If
If FindMethod2.Value = True Then 'Если пользователь выбрал второй метод
FindArray = Split(CustomFind.text) 'преобразуем строку введенную пользователем в массив
For i = 6 To countRows + 5
If Not "~" & Join(FindArray, "~") & "~" Like "*~" & i & "~*" Then
rows(i).Hidden = True 'Скрытие ячеек исключенных при выборочном просмотре
End If
Next i
End If
If FindMethod3.Value = True Then 'Если пользователь выбрал третий метод
iValue = iFind.text 'получаем введеное значение
'выполняем поиск по введенному значению
For i = 6 To countRows + 5
If Not Cells(i, iColumns).Value Like iValue Then
rows(i).Hidden = True
End If
Next i
End If
End Sub
Блок схема программы.
Программа сохранения БД в отдельный файл на диске:
'Сохранение записей в файл
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim c As Range, r As Range
Dim output, buf As String 'используем строку в кач/ве символьного массива
Call countCurRows 'получаем текущее кол/во записей
buf = "A6:I" & (countRows + 5) 'устанавливаем обьем записываемых данных
'цикл заполнения строки
For Each r In Range(buf).rows
For Each c In r.Cells
output = output & c.Value & "," 'формируем текущую строку из значений ячеек
Next c
output = output & vbNewLine 'записываем текущую строку в массив
Next r
Open ThisWorkbook.Path & "\backupDB.txt" For Output As #1 'создаем файл
Print #1, output 'записываем в файл
Close 'закрываем файл
ThisWorkbook.Close SaveChanges:=True
End Sub
Блок схема программы.
Программа чтения данных из файла в БД:
'Читаем данные из файла
Sub ReadFromDestFile()
Dim buffer, str As String 'переменные для чтения из файла
Dim CellsValueArray As Variant 'массив считаных данных
Open ThisWorkbook.Path & "\backupDB.txt" For Input As #1 'указываем файл для чтения
'читаем данные пока не достигнем конца файла
Do Until EOF(1)
Line Input #1, buffer
str = str & buffer
Loop
Close #1
CellsValueArray = Split(str, ",") 'преобразуем строку считанных данных в массив
Dim i, x, y As Integer
x = 6 'начальная строка для записи в открытую книгу
y = 1 'начальный столбец записи
For i = 0 To UBound(CellsValueArray) 'записываем данные в книгу пока не выведем последний элемент массива
If y > 9 Then 'при записи в 9й столбец строки преходим в начало следующей
y = 1
x = x + 1
End If
Cells(x, y) = CellsValueArray(i) 'запись текущего значения элемента массива в ячейку
y = y + 1 'переключаем столбцы
Next i
End Sub
Блок схема программы.