Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Avtomatizatsia_Excel-prilozheny_Tarasyuk_V_B.doc
Скачиваний:
6
Добавлен:
10.11.2019
Размер:
407.55 Кб
Скачать

Соответствие информационных объектов и элементов проекта

Объект

Реквизиты

Льготы

Расписание

UserForm1

Билет

Организация

b1

a1

Город

b2

a2

№ кассы

b3

a3

Пункт

назначения

a2:ai

ComboBox1

c6

№ рейса

b2:bi

TextBox1

c7

Время

отправления

c2:ci

TextBox2

c8

Время в пути

d2:di

TextBox3

c9

Тариф

e2:ei

TextBox4

c10

№ места

g2:gi

TextBox5

c11

Кол-во

свободных мест

f2:fi

TextBox6

Тип (льгота)

a2:ai

CombotBox1

c12

Код льготы

b2:bi

TextBox7

Скидка

c2:ci

TextBox8

Стоимость

TextBox9

c13

Дата

TextBox10

c14

Время

TextBox11

c15

В первую очередь программируются процедуры, обрабатывающие событие загрузки диалоговой формы. При загрузке формы должны автоматически заполняться два раскрывающихся списка (ComboBox1 и ComboBox2) – «Пункт назначения» и «Льготы». Нужные данные хранятся на соответствующих рабочих листах проекта. Двойным щелчком мыши по области формы переключиться в окно процедур и выбрать событие Activate.

Текст процедуры приведен ниже.

Private Sub UserForm_Activate()

Dim i, j As Integer

i = 2

Do While Расписание.Cells(i, 1) <> ""

ComboBox1.AddItem (Расписание.Cells(i, 1))

i = i + 1

Loop

j = 2

Do While Льготы.Cells(j, 1) <> ""

ComboBox2.AddItem (Льготы.Cells(j, 1))

j = j + 1

Loop

TextBox10.Text = Date

TextBox11.Text = Time

End Sub

Данная процедура просматривает и добавляет в раскрывающиеся списки ComboBox1 и ComboBox2 содержимое заполненных ячеек первых столбцов рабочих листов «Льготы» и «Расписание». Заполнение списков прекращается, как только в очередной строке данные отсутствуют. Поскольку первая строка в таблицах – строка заголовков, заполнение списков начинается со второй строки рабочих листов. В текстовые поля TextBox1 и TextBox2 выводятся текущие дата и время.

При написании процедуры следует обратить особое внимание на соответствие имен объектов в процедуре именам, используемым в проекте. В случае выявления их несоответствия рекомендуется сделать следующее. В окне редактора VB выбрать «Вид» (View) – «Окно проекта» (Project). Из списка объектов выбрать нужный рабочий лист и вывести на экран окно свойств «Вид» (View) – «Окно свойств» (Propety)). Затем ввести нужное имя в строке «Name» окна свойств.

Следующий шаг – программирование процедуры события выбора строки из раскрывающегося списка ComboBox_Change. При выборе элемента списка объекта ComboBox в полях TextBox должны появляться данные из связанных с ними столбцов, соответствующие выбранной строке рабочего листа. Поскольку в рассматриваемом примере диалоговое окно располагает двумя объектами ComboBox, то для каждого из них программируется собственная процедура обработки события ComboBoxi_Change. Содержание процедуры, связанной с пунктом назначения приводится ниже.

Private Sub ComboBox1_Change()

Dim i As Integer

i = ComboBox1.ListIndex + 2

TextBox1.Text = Расписание.Cells (i, 2)

TextBox2.Text = Расписание.Cells (i, 3)

TextBox3.Text = Расписание.Cells (i, 4)

TextBox4.Text = Расписание.Cells (i, 5)

TextBox5.Text = Расписание.Cells (i, 6)

TextBox5.Text = Расписание.Cells (i, 7

End Sub

При выборе льготы программа должна пересчитать стоимость продаваемого билета и обновить ее в соответствующем текстовом поле. То же самое должно происходить и при изменении пункта назначения. Эти действия инициализирует процедура обработки события ComboBox2_Change путем изменения содержимого поля, хранящего величину скидки:

Private Sub ComboBox2_Change()

Dim ji As Integer

j = ComboBox2.ListIndex + 2

TextBox7.Text = Льготы. Cells (j, 2)

TextBox8.Text = Льготы. Cells (j, 3)

TextBox9.Text = Льготы. Cells (j, 4)

End Sub

На основании обновленных значений тарифа и льготы процедуры обработки события изменения содержимого соответствующих текстовых полей пересчитывают стоимость билета:

Private Sub TextBox4_Change()

TextBox9.Text = Val(TextBox4.Text) – (Val(TextBox8.Text) / 100) * Val_ (TextBox4.Text)

End Sub

Private Sub TextBox8_Change()

TextBox9.Text = Val(TextBox4.Text) – (Val(TextBox8.Text) / 100) * Val(TextBox4.Text)

End Sub

Командные кнопки должны обеспечивать работу приложения по следующим сценариям: а) отказ от дальнейших действий с сохранением исходного состояния таблиц и бланка билета (кнопка «Отмена»); б) очистка заполняемых полей бланка билета (кнопка «Бланк»); в) генерация продаваемого билета с одновременным пересчетом количества оставшихся свободных мест и изменением номера места для следующего сеанса (кнопка «ОК»).

Процедура обработки события нажатия на кнопку «Отмена» имеет вид:

Private Sub CommandButton3_Click()

UserForm1. Hide

End Sub

Процедура обработки события нажатия на кнопку «Бланк» выглядит следующим образом:

Private Sub CommandButton2_Click()

Билет.Activate

Range("c6 : c12; a1:a3").Select

Selection.Clear

UserForm1. Hide

End Sub

Процедура обработки события CommandButton1_Click выглядит так:

Private Sub CommandButton1_Click()

Rem Проверка наличия мест по содержанию поля TextBox6. Выдача соответствующего сообщения при отсутствии мест. Заполнение бланка билета при их наличии

If Val(TextBox5.Text) = 0 Then

MsgBox "На выбранный рейс мест нет"

Else

Билет.Range("c3") = UserForm1.ComboBox1.Text

Билет.Range("C4") = UserForm1.TextBox1.Text

Билет.Range("C5") = UserForm1.TextBox2.Text

Билет.Range("C6") = UserForm1.TextBox3.Text

Билет.Range("C7") = UserForm1.TextBox4.Text

Билет.Range("C8") = UserForm1.TextBox6.Text

Rem Если льгота не выбрана, печатать в соответствующем поле бланка - “Полный”

If ComboBox2.Text = "" Then

Билет.Range("c9") = "Полный"

Else

Билет.Range("c9") = UserForm1.ComboBox2.Text

End If

Билет.Range("C10") = UserForm1.TextBox9.Text

Билет.Range("C11") = UserForm1.TextBox10.Text

Билет.Range("a1") =Реквизиты. Range(“b1”)

Билет.Range("a2") = Реквизиты. Range(“b2”)

Билет.Range("a31") = Реквизиты. Range(“b3”)

Билет.Activate

Rem Определение строки в таблице Расписание, соответствующей проданному билету. Обновление информации в полях количество оставшихся мест и текущего значения места следующего билета

k = 2

Do While Расписание. Cells(k, 2) <> UserForm1. TextBox1. Text

k = k + 1

Loop

Расписание.Cells(k, 6). Value = Расписание. Cells(k, 6). Value - 1

Расписание.Cells(k, 7). Value = Расписание. Cells(k, 7). Value + 1

UserForm1. Hide

End If

End Sub

Для ежедневного обновления информации о свободных местах на рабочем листе «Расписание» диалоговая форма дополняется соответствующей кнопкой и программируется процедура, обеспечивающая этот режим:

Private Sub CommandButton4_Click()

n = 2

Do While Расписание.Cells(n, 1) <> ""

Расписание.Cells(n, 6).Value = 40

Расписание.Cells(n, 7).Value = 1

n = n + 1

Loop

MsgBox "Обновление произведено"

End Sub

Следующим шагом по разработке приложения является его дополнение файлом справки. Справочная информация вызывается по кнопке «CommandButton5». Щелчок по этой кнопке выводит на экран форму UserForm2, на которой размещен элемент TextBox, используемый для демонстрации содержимого текстового файла спраки в режиме «Только чтение». Процедура вызова справки имеет вид:

Private Sub CommandButton5_Click()

Wrap$ = Chr(13) + Chr(10)

Open "c:\rf.txt" For Input As 1

Do Until EOF(1)

Line Input #1, Lineoftext$

LineFull$ = Lineoftext$ + Wrap$

Alltext$ = Alltext$ & LineFull$

Loop

UserForm2. TextBox1. MultiLine = True

UserForm2. TextBox1. ScrullBurs = 3

UserForm2. TextBox1.Text = Alltext$

Close #1

End Sub

Строковая переменная Wrap$ служит для маркировки концов строк.

На заключительном этапе добавляется кнопка, автоматического запуска макроса. Для этого следует выполнить следующие действия: в меню «Вид» выбрать строку «Панель инструментов» – «Настройка»; с помощью кнопки «Создать» добавить новую панель инструментов; переключиться в подокно «Команды» и выбрать из списка разделов раздел «Макросы»; перетащить нужную кнопку на добавленную панель; затем щелкнуть по ней правой кнопкой мыши для вызова контекстного меню; выбрать пункт «Назначить макрос»; в открывшемся списке макросов выбрать нужный; в завершение отредактировать значок на командной кнопке, подобрать размер и оформление.

Следует помнить, что добавленная кнопка является элементом интерфейса Excel и при копировании приложения на другой компьютер переноситься не будет.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]