Работа с формами 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
Блок схема программы.
|