Combine As Boolean 'совместительство



Post As String * 30

Degree As String * 10

End Type

Перепишем теперь записи таблицы в файл произвольного доступа. При открытии файла указывается Random - произвольный доступ к элементам, и обязательно - длина элементов, образующих его. Запись в файл осуществляется функцией Put, в которой необходимо указать номер файла, позицию и переменную из которой производится запись в файл. Позиция может быть пропущена, тогда запись производится в текущую позицию[4].

Sub NewFile()

Dim i As Integer

Dim MyRecord As Employee ' Объявляем переменную типа запись

Open "bd.dat" For Random As #1 Len = Len(MyRecord)

For i = 2 To Application.CountA(ActiveSheet.Columns(1)) ' для всех записей таблицы

With MyRecord  'считываеv из i-ой строки запись о сотруднике

   .ID = Cells(i, 1)

   .Family = Cells(i, 2)

   .Name = Cells(i, 3)

   .LenService = Cells(i, 4)

   .Category = Cells(i, 5)

   .BirthDay = Cells(i, 6)

   .Combine = Cells(i, 7)

   .Post = Cells(i, 8)

   .Degree = Cells(i, 9)

End With

Put #1, i - 1, MyRecord ' Записываем запись в файл

Next i

Close #1 ' Закрываем файл

End Sub

Откройте созданный файл в блокноте и посмотрите результат.  Сравните объем созданного файла и файла Execel, состоящего из одного листа с таблицей. Хранение данных в файлах произвольного доступа имеет свои преимущества - экономию памяти, но усложняет извлечение данных из них.

2. Следующий этап - это чтение из файла. Предположим, что у нас есть файл с данными и мы хотим его просмотреть на листе Excel. Для этого необходимо подготовить форму таблицы - ее заголовок,  считать и отобразить записи из файла произвольного доступа. Чтение осуществляет функция Get, в которой указывается номер файла, позиция считывания[5] и переменная, в которую заносятся считанные данные. Проиллюстрируем сказанное:

Sub FileInTable()

Dim i As Integer

Dim MyRecord As Employee ' Объявляем переменную типа запись

'Названия столбцов таблицы берем из массива

Range("A1:I1").Value = Array("n/n", "ФАМИЛИЯ", "ИМЯ", "СТАЖ", "РАЗРЯД",_ "ДАТА РОЖДЕНИЯ", "СОВМЕСТИТЕЛЬСТВО", "ДОЛЖНОСТЬ", "СТЕПЕНЬ")

Заголовок       'Запускаем макрос форматирования «шапки» таблицы и закрепления области

Примечания           'добавляем примечания к заголовкам

'открываем файл произвольного доступа при этом обязательно указывается длина одной записи

Open "bd.dat" For Random As #1 Len = Len(MyRecord)

i = 1

Do

Get #1, i, MyRecord ' Читаем одну запись

If EOF(1) Then 'если конец файла - выходим из цикла чтения элементов

Exit Do

Else

With MyRecord 'переносим прочитанные поля на лист Excel

   Cells(i + 1, 1) = .ID

   Cells(i + 1, 2) = .Family

   Cells(i + 1, 3) = .Name

   Cells(i + 1, 4) = .LenService

   Cells(i + 1, 5) = .Category

   Cells(i + 1, 6) = .BirthDay

   Cells(i + 1, 7) = .Combine

   Cells(i + 1, 8) = .Post

   Cells(i + 1, 9) = .Degree

End With

i = i + 1

End If

Loop

Close #1 ' Закрываем файл

End Sub

Эта процедура использует ранее записанный макрос Заголовок[6] и процедуру Примечания. Процедура Примечания добавляет к заголовкам таблицы примечания. Это можно сделать, используя Вставка\Примечание или программно:

Public Sub Примечания()

Range("1:1").ClearComments ‘очистка примечаний первой строки

Range("A1").AddComment  ‘добавить примечание к заголовку первого столбца

Range("A1").Comment.Visible = False

Range("A1").Comment.Text "Номер сотрудника"

‘…

End Sub

Самостоятельно напишите код для добавления примечаний к остальным столбцам.

3. Задача: увеличить на 1 разряд категорию работнику кафедры, который проработал дольше всех.

Sub ПоискВетерана()

Dim max As Integer, nmax As Integer, i As Integer

Dim MyRecord As Employee ' Объявляем переменную типа запись

Open "bd.dat" For Random As #1 Len = Len(MyRecord)

i = 1

max = -1

Do

Get #1,  , MyRecord ' Читаем одну запись

If EOF(1) Then 'если конец файла - выходим из цикла чтения элементов

Exit Do

Else

If MyRecord.LenService > max Then

max = MyRecord.LenService

nmax = i

End If

i = i + 1

End If

Loop

Get #1, nmax, MyRecord ' Читаем запись с максимальным стажем

MsgBox ("Дольше всего работает " & MyRecord.LenService & " гг " & Trim(MyRecord.Family) & " " & Trim(MyRecord.Name))

MyRecord.Category = MyRecord.Category + 1 'Повышаем категорию


Дата добавления: 2018-08-06; просмотров: 459; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!