Лабораторная работа № 5
ИЗУЧЕНИЕ VBA
«Обработка записей»
I Краткая теория
Наряду с массивами, представляющими нумерованный набор элементов одного типа, существует ещё один способ создания структурного типа – тип, определенный пользователем, или иначе он называется – запись.
Запись – это совокупность нескольких элементов, каждый из которых может иметь свой тип. Элемент записи называется полем.
Тип-запись описывается в модуле VBA до объявления самого модуля со слова Sub.
Например, определим тип-запись Сотрудник, который будет состоять из полей Фамилия, Имя, Табельный_номер, Должность, Оклад.
Пример 1.
Type Сотрудник
Фамилия As String*20
Имя As String*20
Табельный_номер As Integer
Должность As String*20
Оклад As Integer
End Type
Обычно обработке подвергается массив из записей (например, данные о пяти сотрудниках, информация о которых включает поля из предыдущего примера), который представляет табличную базу данных.
Базу можно формировать непосредственно в программе присвоением каждому из полей конкретных константных значений.
Пример 2.
После объявления типа Сотрудник используем его в модуле для создания массива, содержащего элементы этого типа. Например, зададим программным путем 2 записи, содержащих сведения о двух сотрудниках и выведем их в таблицу Excel.
Примечание: доступ к полям осуществляется через название записи и поля, разделенных точкой.
Наберите на листе модуля следующий код (модуль всавляется в редакторе Visual Basic командой Insert - Module):
Type Сотрудник
Фамилия As String * 20
Имя As String * 20
Табельный_номер As Integer
Должность As String * 20
Оклад As Integer
End Type
Sub База_Данных_о_сотрудниках()
Dim Кадр(1 To 2) As Сотрудник
'присваиваем значения полям первой записи
Кадр(1).Фамилия = "Иванов"
Кадр(1).Имя = "Иван"
Кадр(1).Табельный_номер = "101"
Кадр(1).Должность = "инженер"
Кадр(1).Оклад = "3000"
'выводим эти значения в первый столбец таблицы Excel
Cells(1, 1) = Кадр(1).Фамилия
Cells(2, 1) = Кадр(1).Имя
Cells(3, 1) = Кадр(1).Табельный_номер
Cells(4, 1) = Кадр(1).Должность
Cells(5, 1) = Кадр(1).Оклад
'присваиваем значения полям второй записи
Кадр(2).Фамилия = "Петров"
Кадр(2).Имя = "Петр"
Кадр(2).Табельный_номер = "102"
Кадр(2).Должность = "токарь"
Кадр(2).Оклад = "1000"
'выводим эти значения в первый столбец таблицы Excel
Cells(1, 2) = Кадр(2).Фамилия
Cells(2, 2) = Кадр(2).Имя
Cells(3, 2) = Кадр(2).Табельный_номер
Cells(4, 2) = Кадр(2).Должность
Cells(5, 2) = Кадр(2).Оклад
End Sub
Нажмите теперь F5, и перейдите в таблицы Excel. Вы увидите, что два столбца заполнились соответствующими данными.
Недостаток заполнения полей значениями программным путем в том, что код будет слишком громоздким, если записей окажется много.
Для облегчения ввода данных используем циклы. Причем данные пользователь будет сам вводить с клавиатуры через окно InputBox
Type Сотрудник
Фамилия As String * 20
Имя As String * 20
Табельный_номер As Integer
Должность As String * 20
Оклад As Integer
End Type
Sub База_Данных_о_сотрудниках()
Dim Кадр(1 To 5) As Сотрудник
'присваиваем значения полям i-той записи
For i = 1 To 5
Кадр(i).Фамилия = InputBox("Введите фамилию", "Ввод данных о сотруднике")
Кадр(i).Имя = InputBox("Введите имя", "Ввод данных о сотруднике")
Кадр(i).Табельный_номер = InputBox("Введите табельный номер", "Ввод данных о сотруднике")
Кадр(i).Должность = InputBox("Введите должность", "Ввод данных о сотруднике")
Кадр(i).Оклад = InputBox("Введите оклад", "Ввод данных о сотруднике")
'выводим эти значения в i-тый столбец таблицы Excel
Cells(1, i) = Кадр(i).Фамилия
Cells(2, i) = Кадр(i).Имя
Cells(3, i) = Кадр(i).Табельный_номер
Cells(4, i) = Кадр(i).Должность
Cells(5, i) = Кадр(i).Оклад
Next i
End Sub
Чтобы регулировать количество записей по запросу пользователя, следует массив из записей сделать безразмерным:
Dim Кадр() As Сотрудник
А потом в программе запросить количество записей:
n = InputBox("Введите количество записей")
Затем переопределить размерность массива
ReDim Кадр(n)
Протестируйте ниже приведенный код и разберите участок программы, который очищает ячейки таблицы от ранее введенных значений:
Type Сотрудник
Фамилия As String * 20
Имя As String * 20
Табельный_номер As Integer
Должность As String * 20
Оклад As Integer
End Type
Sub База_Данных_о_сотрудниках()
Dim Кадр() As Сотрудник
'для очищения ячеек от предыдущих заполнений используем конструкцию:
Range("A1:H100").Select 'выделим диапазон ячеек с А1 по Н100
Selection.Clear 'очистим этот диапазон
Range("A1").Select 'перейдем в ячейку А1,чтобы с неё начать заполнение
n = InputBox("Введите количество записей")
ReDim Кадр(n)
'присваиваем значения полям i-той записи
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.