Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчеты по лабораторным работам.docx
Скачиваний:
109
Добавлен:
29.03.2015
Размер:
806.57 Кб
Скачать

Лабораторная работа №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

Блок схема программы.