Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭУК-03-02-02-м04. Разработка динамической формы...doc
Скачиваний:
4
Добавлен:
26.11.2019
Размер:
1.74 Mб
Скачать

Козырев а.А. Информационные технологии в экономике и управлении: Учебник. Второе издание. – сПб.: Изд-во Михайлова в.А., 2001. – с.179-195

ЭУК-03-02-02-м01-05 Общая постановка задачи

Разработать форму ввода данных, написать программу обработки событий элементов этой формы и накопления массива данных для пачки документов на языке VBA.

ЭУК-03-02-02-м01-06 Список индивидуальных данных

Исходными данными для практического занятия являются данные на разработку шаблона документа из предыдущих практических занятий. Заполнить тестовыми данными и накопить их в массиве для 5-ти экземпляров входных документов.

ЭУК-03-02-02-м01-07 Пример выполнения работы

txtNumMilitary

cmbSpec

txtName

txtAdress

lbMilitary

chkMilitary

optM

lbAdress

optW

optSingle

optMaried

txtNumMilitary

1. Добавить следующие элементы:

2. В Module1 (см .рис.) записать следующий программный код (если Module1 отсутствует в проекте, то добавить его командой Insert -> Module):

'Программа для работы с базой данных карточек студентов

Option Explicit 'Заставляет объявлять все переменные

Option Base 1 'Устанавливает начальный индекс массива в 1

Type DBEntry 'Определяет структуру записи базы данных

Spec As String

Name As String

Pol As Boolean

Semja As Boolean

Adress As String

Military As Boolean

NumMilitary As String

RecNo As Integer

End Type

Public theDB() As DBEntry 'Массив базы данных

Public numEntries As Integer 'Общее количество записей

Public theEntryNum As Integer 'Текущая отображаемая запись

'Инициализация базы данных

Public Sub Init()

numEntries = 0

theEntryNum = 0

fmStudent.sbNum.Min = 1

fmStudent.sbNum.Max = 1

fmStudent.Show

End Sub

'Процедура AutoOpen вызывается при каждом открытии документа

Public Sub AutoOpen()

Init

End Sub

'Пересылка записи в базу данных

Public Sub EntryToDB(anEntry As Integer)

With fmStudent

theDB(anEntry).Spec = .cmbSpec.Value

theDB(anEntry).Name = .txtName.Value

theDB(anEntry).Pol = .optM.Value

theDB(anEntry).Semja = .optMaried.Value

theDB(anEntry).Adress = .txtAdress.Value

theDB(anEntry).Military = .chkMilitary.Value

theDB(anEntry).NumMilitary = .txtNumMilitary.Value

theDB(anEntry).RecNo = anEntry

End With

End Sub

'Пересылка записи в бланк

Public Sub DBToEntry(anEntry As Integer)

With fmStudent

.cmbSpec.Value = theDB(anEntry).Spec

.txtName.Value = theDB(anEntry).Name

.optM.Value = theDB(anEntry).Pol

.optW.Value = Not theDB(anEntry).Pol

.optMaried.Value = theDB(anEntry).Semja

.optSingle.Value = Not theDB(anEntry).Semja

.txtAdress.Value = theDB(anEntry).Adress

.chkMilitary.Value = theDB(anEntry).Military

.txtNumMilitary.Value = theDB(anEntry).NumMilitary

.lbNumEntry.Caption = "Запись №" & _ Str(theDB(anEntry).RecNo) & " из " & Str(numEntries)

.sbNum.Value = anEntry

End With

End Sub

3. В код формы fmStudent добавить процедуры для новых элементов (для вставки процедуры-обработчика элемента надо дважды щёлкнуть на элементе в редакторе формы):

'Добавление новой записи

Private Sub btnNewEntry_Click()

numEntries = numEntries + 1

theEntryNum = numEntries

ReDim Preserve theDB(numEntries) 'Увеличение массива

fmStudent.sbNum.Max = numEntries

EntryToDB numEntries 'Пересылка записи в массив

DBToEntry numEntries 'Чтение и отображение theEntryNum

End Sub

'Сохранение измененной записи

Private Sub btnUpdateEntry_Click()

'Если ещё нет записей, то выход

If theEntryNum = 0 Then Exit Sub

EntryToDB theEntryNum

End Sub

'Удаление записи

Private Sub btnDeleteEntry_Click()

Dim I As Integer, buttons As Integer

Dim theMsg As String

If numEntries = 0 Then Exit Sub 'Ещё нет записей

'Убедимся, что пользователь действительно хочет удалить

запись

buttons = vbYesNo + vbDefaultButton2 + vbQuestion + vbApplicationModal

theMsg = "Вы действительно хотите удалить текущую запись?"

If MsgBox(theMsg, buttons, "Удаление записи") = vbNo Then

Exit Sub

End If

'Проверка: это последняя запись?

If theEntryNum = numEntries Then

numEntries = numEntries - 1

ReDim Preserve theDB(numEntries)

theEntryNum = numEntries

ElseIf theEntryNum = 0 Then 'Проверка на наличие записей

Exit Sub

Else 'Перемещение оставшихся записей

For I = theEntryNum + 1 To numEntries

theDB(I - 1) = theDB(I)

theDB(I - 1).RecNo = I - 1

Next I

numEntries = numEntries - 1

ReDim Preserve theDB(numEntries)

End If

DBToEntry theEntryNum

fmStudent.sbNum.Value = theEntryNum

fmStudent.sbNum.Max = numEntries

End Sub

'Поиск записи по фамилии

Private Sub btnFindName_Click()

Static theName As String

Dim I As Integer

If numEntries = 0 Then Exit Sub 'Ещё нет записей

theName = InputBox("Введите имя для поиска", "Поиск имени", theName)

For I = 1 To numEntries

If InStr(1,theDB(I).Name,theName,vbTextCompare)<>0 Then

theEntryNum = I

DBToEntry theEntryNum

Exit Sub

End If

Next I

'Запись не найдена

MsgBox "Имя: " & theName & " не найдено.", , "Поиск имени"

End Sub

'Закрытие формы

Private Sub btnClose_Click()

fmStudent.Hide

End Sub

'Прокрутка записей

Private Sub sbNum_Change()

If numEntries = 0 Then Exit Sub 'Ещё нет записей

theEntryNum = fmStudent.sbNum.Value

DBToEntry theEntryNum

End Sub

'Процедура, вызываемая при установке/снятии флажка «Военнообязанный»

Private Sub chkMilitary_Click()

With fmStudent

If .chkMilitary.Value = True Then

.lbMilitary.Visible = True

.txtNumMilitary.Visible = True

Else

.lbMilitary.Visible = False

.txtNumMilitary.Visible = False

End If

End With

End Sub

'Процедура, вызываемая при установке переключателя «мужской»

Private Sub optM_Click()

With fmStudent

.optSingle.Caption = "холост"

.optMaried.Caption = "женат"

.lbMilitary.Visible = True

.txtNumMilitary.Visible = True

If .optMaried.Value = True Then

.lbAdress.Caption = "Адрес жены:"

Else

.lbAdress.Visible = False

.txtAdress.Visible = False

End If

.chkMilitary.Value = True

.chkMilitary.Visible = True

End With

End Sub

'Процедура, вызываемая при установке переключателя «женат»

Private Sub optMaried_Click()

With fmStudent

If .optM.Value = True Then

.lbAdress.Caption = "Адрес жены:"

Else

.lbAdress.Caption = "Адрес мужа:"

End If

.lbAdress.Visible = True

.txtAdress.Visible = True

End With

End Sub

'Процедура, вызываемая при установке переключателя «холост»

Private Sub optSingle_Click()

With fmStudent

.lbAdress.Visible = False

.txtAdress.Visible = False

End With

End Sub

'Процедура, вызываемая при установке переключателя «женский»

Private Sub optW_Click()

With fmStudent

.optSingle.Caption = "не замужем"

.optMaried.Caption = "замужем"

If .optMaried.Value = True Then

.lbAdress.Caption = "Адрес мужа:"

Else

.lbAdress.Visible = False

.txtAdress.Visible = False

End If

.chkMilitary.Value = False

.chkMilitary.Visible = False

.lbMilitary.Visible = False

.txtNumMilitary.Visible = False

End With

End Sub

'-----------------------------

'Процедура, вызываемая перед отображением формы на экране (инициализация формы)

Private Sub UserForm_Initialize()

With fmStudent

With .cmbSpec

.AddItem "Прикладная информатика в экономике"

.AddItem "Прикладная информатика в юриспруденции"

.AddItem "Менеджмент"

.AddItem "Бухучет"

.AddItem "Финансы и кредит"

End With

.optSingle.Value = True

.optM.Value = True

.optSingle.Caption = "холост"

.optMaried.Caption = "женат"

.lbAdress.Visible = False

.txtAdress.Visible = False

.lbMilitary.Visible = True

.txtNumMilitary.Visible = True

.chkMilitary.Value = True

End With

End Sub

'-----------------------------

'Макрос, запускающийся после открытия документа (автооткрытие)

Public Sub AutoOpen()

fmStudent.Show

End Sub

ЭУК-03-02-02-м01-08 Контрольные вопросы к защите

  • Что включает в себя проект VBA?

  • Как включить в проект новый прграммный модуль?

  • Как включить в проект новую форму?

  • Как создать процедуру для обработки события в форме?

ЭУК-03-02-02-м01-09 Способ оценки результатов

Оценка по лабораторной работе формируется по итогам защиты лабораторной работы.

Отличную оценку можно получить только в том случае, если:

  1. Работа выполнена правильно.

  2. Отчет составлен в соответствии с требованиями.

  3. Даны правильные ответы на все вопросы карточки.

Хорошую оценку можно получить только в том случае, если:

  1. Работа выполнена правильно.

  2. Отчет составлен в соответствии с требованиями.

  3. Даны правильные ответы на 3-4 вопроса карточки.

Удовлетворительная оценка проставляется, если :

  1. Работа выполнена с незначительными ошибками.

  2. Отчет полностью не соответствует требованиям.

  3. Даны правильные ответы на 2 вопроса карточки.

Неудовлетворительная оценка проставляется, если :

  1. Работа выполнена с ошибками.

  2. Отчет не соответствует требованиям.

  3. Дан правильный ответ на 1 вопрос карточки.

1

2 Или иному элементу управления.

3 Все, что мы будем говорить о переменных, относится также и к массивам.

4 Другие приложения Office не позволяют пользователю выводить сообщения в строке состояния.