Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Реализация ГИС VBA

.pdf
Скачиваний:
10
Добавлен:
02.03.2016
Размер:
1.8 Mб
Скачать

Знакомство с VBA

В каждой лабораторной работе разрабатывается пример пользовательского приложения и дается подробный анализ. Тексты всех программ снабжены доскональными комментариями, но будьте внимательны (встречаются ошибки!). По завершению лабораторных работ будет предложено самостоятельное задание, выполнение которого поможет лучше закрепить разобранный материал.

Лабораторная работа №1

Тема «Составление расписания»

Цель работы

В данном уроке разрабатывается приложение, автоматизирующее составление расписания с одновременным подведением итогов.

Конструируя данное приложение, вы узнаете на практике, что такое:

передача информации между элементами управления при обработке события Click,

управление видимостью рисунков,

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

Практика

Иванов, Петров и Сидоров построили небольшой магазинчик «Магазин – 24 часа» у деревне Неелово на трассе Москва – Санкт-Петербург. Работу в магазинчике они разбили на две смены по 12 часов. В начале очередной недели они вместе составляют график своего дежурства на неделю, в котором подсчитывается число рабочих смен каждого компаньона. Через месяц они решили автоматизировать процесс создания расписания. С этой целью они разработали приложение, процесс создания которого обсуждается ниже.

В редакторе форм создадим диалоговое окно магазина (рис. 1).

Кроме этого, в любом графическом редакторе, например Paint, создадим файл ball.bmp с изображением красного шара и фоном рисунка того же цвета, что и цвет диалогового окна.

Расписание составляется очень просто:

1. Перемещением указателя на надпись из группы компаньоны и щелчком кнопкой мыши выбирается компаньон, который будет дежурить. Программа информирует пользователя о выборе кандидата в дежурные отображением красного круга рядом с его именем.

Рис. 1. Диалоговое окно магазина «Магазин – 24 часа»

2. Для более наглядного представления надписи, соответствующие сменам с 0 до 12 часов, имеют белый цвет фона, а надписи, соответствующие сменам с 12 до 24 часов, имеют желтый цвет фона.

Рис. 2. Заполнение диалогового окна

3.Ввод имени дежурного в смену производится перемещением указателя на надпись соответствующей смены и щелчком кнопкой мыши. Программа автоматически вставляет имя дежурного в надпись смены (Рис. 2).

4.Удалить имя дежурного из смены можно, указав на пустую надпись в группе компаньоны и выполнив щелчок, а затем переместив указатель на надпись смены, из которой требуется удалить имя дежурного, и также щелкнув кнопкой мыши.

5.Подсчет числа рабочих смен каждого из компаньонов производится нажатием на кнопку Ок.

Обсудим, как приведенная ниже программа решает описанную задачу и что в ней происходит.

 

UserForm Initialize

1. Активизирует диалоговое окно.

 

 

2. Очищает все надписи и задает свойства

 

 

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

 

 

3. Устанавливает тип границы и цвет фона

 

 

надписей.

 

 

 

 

 

Нажатие кнопки ок

Производит расчет числа рабочих смен

 

запускает на выполнение

компаньонов.

 

процедуру

 

 

 

CommandButtonl Click

 

 

 

Нажатие кнопки Отмена

Закрывает диалоговое окно.

 

запускает на выполнение

 

 

 

процедуру

 

 

 

CommandButton2 Click

 

 

 

От Labell Click до

Считывает имя кандидата в дежурные при выборе

 

 

Label4_Click

соответствующей надписи из группы компаньоны.

 

 

Сигнализирует об этом отображением красного

 

 

круга рядом с именем выбранного кандидата.

 

 

 

 

 

От Labels Click до Label18

Вводит имя кандидата в дежурные в надпись

 

 

 

 

Click

соответствующей смены.

 

 

 

 

 

 

 

 

 

Код программы

' Переменные уровня модуля

Dim Имя As String

Dim Надписи(1 То 2, 1 То 7) As Object

Private Sub CommandButton1_Click()

Dim Смены_1, Смены_2, Смены_3 As Integer

Смены_1 = 0 Смены_2 = 0 Смены_3 = 0 For i = 1 То 2

For j = 1 То 7

If Надписи(i, j).Caption = Label1.Caption

Then Смены_1 = Смены_1 + 1

If Надписи(i, j).Caption = Label2.Caption

Then Смены_2 = Смены_2 + 1

If Надписи(i, j).Caption = Label3.Caption

Then Смены_3 = Смены_3 + 1

Next j

Next i

TextBox1.Text = CStr(Смены_1)

TextBox2.Text = CStr(Смены_2)

TextBox3.Text = CStr(Смены_3)

End Sub

Private Sub CommandButton2_Click()

UserForm1.Hide

End Sub

'Процедуры считывания имени дежурного из группы «Компаньоны»

Private Sub Label1_Click () Имя = Label1.Caption Действие True, False, False End Sub

Private Sub Label2_Click() Имя = Label2.Caption Действие False, True, False End Sub

Private Sub Label3_Click() Имя = Label3.Caption Действие False, False, True End Sub

Private Sub Label4_Click() Имя = Label4.Caption Действие False, False, False End Sub

'Процедуры ввода имени дежурного

Private Sub Label5_Click() Label5.Caption = Имя

End Sub

Private Sub Label6_Click0 Label6.Caption = Имя

End Sub

Private Sub Label7_Click() Label7.Caption = Имя

End Sub

Private Sub Label8_Click() Label8.Caption = Имя

End Sub

Private Sub Label9_Click() Label9.Caption = Имя

End Sub

Private Sub Label10_Click() Label10.Caption = Имя

End Sub

Private Sub Label11_Click() Label11.Caption = Имя

End Sub

Private Sub Label12_Click() Label12.Caption = Имя

End Sub

Private Sub Label13__Click () Label13.Caption = Имя

End Sub

Private Sub Labell4_Click() Labell4.Caption = Имя

End Sub

Private Sub Labell5_Click() Label15.Caption = Имя

End Sub

Private Sub Label16_Click() Label16.Caption = Имя

End Sub

Private Sub Labell7_Click() Labell7 .Caption = Имя

End Sub

Private Sub Label18_Click() Label18.Caption = Имя

End Sub

'Инициализация диалогового окна

Private Sub UserForm_Initialize() Dim i, j As Integer

Set Надписи(1, 1) = Label5 Set Надписи(2, 1} = Label6 Set Надписи(1, 2) = Label7 Set Надписи(2, 2) = Label8 Set Надписи(1, 3) = Label9 Set Надписи(2, 3) = Labell0 Set Надписи(1, 4) = Label11 Set Надписи(2, 4) = Labell2 Set Надписи(1, 5) = Label13 Set Надписи(2, 5) = Label14 Set Надписи(1, 6) = Labell5 Set Надписи(2, 6) = Labell6 Set Надписи(1, 7) = Labell7 Set Надписи(2, 7) = Label18

'

With Label4

.Caption = ""

.BorderStyle = fmBorderStyleSingle End With

With Image1

.Picture = LoadPicture("ball.bmp")

.BorderStyle = fmBorderStyleNone

.PictureSizeMode = fmPictureSizeModeZoom

.PictureAlignment = fmPictureAlignmentTopLeft

.Visible = False End With

'

With Image2

.Picture = LoadPicture("ball.bmp")

.BorderStyle = fmBorderStyleNone

.PictureSizeMode = fmPictureSizeModeZoom

.PictureAlignment = fmPictureAlignmentTopLeft

.Visible = False End With

'

With Image3

.Picture = LoadPicture("ball.bmp")

.BorderStyle = fmBorderStyleNone

.PictureSizeMode = fmPictureSizeModeZoom

.PictureAlignment = fmPictureAlignmentTopLeft

.Visible = False End With

'

For i = 1 To 2 For j = 1 To 7 With Надписи(i, j)

.Caption = ""

.BorderStyle = fmBorderStyleNone Select Case i Case 1

.BackColor = vbWhite Case 2

.BackColor = vbYellow End Select End With

Next j

Next i

End Sub

' Процедура, устанавливающая отображение или скрытие рисунков

Sub Действие(Flagl, Flag2,Flag3 As Boolean) Image1.Visible = Flagl

Image2.Visible = Flag2

Image3.Visible = Flag3 End Sub

Лабораторная работа №2

Тема «Заполнение базы данных»

Цель работы

В этом уроке разрабатывается приложение, позволяющее при помощи диалогового окна заполнять базу данных. Конструируя данное приложение, вы сможете освоить следующие операции:

последовательное заполнение плоской базы данных,

программирование примечаний,

программирование текстовых полей на рабочем листе,

использование переключателя и флажков,

создание пользовательского заголовка окна приложения,

как на рабочем листе программно закрепить область.

Практика

Для заполнения базы данных на рабочем листе с помощью редактора пользовательских форм создадим диалоговое окно Регистрация туристов фирмы «Лето»

(Рис. 1).

Рис. 1. Диалоговое окно «Регистрация туристов фирмы "Лето"»

Рис. 2. База данных о туристах на рабочем листе

Рис. 3. Пояснительное текстовое поле, появляющееся при выборе переключателя

При инициализации диалогового окна программа проверяет, есть ли заголовки у полей создаваемой базы данных о регистрации туристов. Если этих заголовков нет, то программа автоматически создает их, снабжая примечаниями, имеющими пояснительный текст о содержании полей (Рис. 2). Выбор переключателя о программе приведет к отображению на экране текстового поля с пояснениями к данной программе. Снятие этого флажка удаляет данное поле (Рис. 3). Обратите внимание, что у окна приложения пользовательское имя Регистрация туристов фирмы «Лето».

Обсудим, как приведенная ниже программа решает перечисленные задачи и что происходит в программе.

 

UserForm Initialize

 

1.

Активизирует диалоговое окно.

 

 

 

 

 

2.

Назначает клавише <Esc> функцию

 

 

 

 

кнопки Отмена, а Клавише <Enter> -

 

 

 

 

Вычислить.

 

 

 

3.

Назначает кнопкам вычислить, отмена и

 

 

 

 

переключателю о программе

 

 

 

 

всплывающие подсказки.

 

 

 

4.

Закрепляет первую строку так, чтобы

 

 

 

 

она всегда отображалась на экране.

 

 

 

5.

Создает заголовки полей базы данных,

 

 

 

 

если они еще не были созданы.

 

 

 

6.

Устанавливает начальное значение

 

 

 

 

переключателя 0 программе.

 

 

 

7.

Заполняет раскрывающийся список.

 

 

 

8.

Устанавливает текст заголовка окна

 

 

 

 

приложения.

 

 

 

 

 

Нажатие кнопки вычислить

1.

Определяет номер первой пустой строки

запускает на выполнение

 

в базе данных о регистрации туристов,

процедуру

 

куда будет введена новая запись.

 

 

2.

Считывает данные из диалогового окна.

CommandButton1_Click

3.

Вводит их в первую пустую строку.

 

 

 

Нажатие кнопки Отмена

Закрывает диалоговое окно. Устанавливает

запускает на выполнение

заголовок приложения, используемый по

процедуру

умолчанию, т. е. удаляет пользовательский

 

 

заголовок приложения, созданный при

CommandButton2_Click

активизации формы.

 

 

 

SpinButtonl_Change

Вводит значение в поле продолжительность

 

 

тура.

 

 

 

 

 

 

 

 

ToggleButtonl Click

Отображает текстовое поле в выбранном

 

 

состоянии и удаляет его – в снятом состоянии.

 

 

 

 

 

ЗаголовокРабочегоЛиста

Создает заголовки полей базы данных о

 

 

регистрации туристов. Эти заголовки

 

 

отображаются с примечаниями.

 

 

 

 

 

 

Код программы

Private Sub CommandButtonl_Click()

'Процедура считывания информации из диалогового окна

'и записи ее в базу данных на рабочем листе

'Смысл переменных однозначно определен их названиями

Dim Фамилия As String * 20 Dim Имя As String * 20

Dim Пол As String * 3

Dim ВыбранныйТур As String * 20 Dim Оплачено As String * 3

Dim Фото As String * 3 Dim Паспорт As String * 3

Dim Срок As String * 3

Dim НомерСтроки As Integer '

'НомерСтроки - номер первой пустой строки рабочего листа

НомерСтроки = Application.CountA(ActiveSheet.Columns(1)) + 1

'Считывание информации из диалогового окна в переменные

'

With UserForm1

Фамилия = .TextBox1.Text Имя = .TextBox2.Text Срок = .TextBox3.Text

If .OptionButton1.Value = True Then

Пол = "Муж" Else

Пол = "Жен" End If

If .CheckBox1.Value = True Then Оплачено = "Да"

Else

Оплачено = "Нет" End If

If .CheckBox2.Value = True Then

Фото = "Да"

Else

Фото = "Нет"

End If

If .CheckBoxS.Value = True Then

Паспорт = "Да"

Else

Паспорт = "Нет"

End If

ВыбранныйТур = .ComboBox1.List(.ComboBox1.Listlndex, 0) End With