Метод создания рабочего расписания

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

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

Как только разработка пользовательской формы будет завершена, можно приступать к написанию кода обработки событий. Для диалогового окна OptionsForm в процедуре UserForm_Initialize первый переключатель устанавливается по умолчанию. Процедура OKButton_Click заносит установленное значение в переменную Choice. Процедура CancelButton_Click выгружает пользовательскую форму и завершает выполнение программы.

8.1 Код обработки событий формы OptionsForm

Sub UserForm_Initialize()

Установка первого переключателя по умолчанию

Optionl = True SubSub OKButton_Click()

Сохранение переключателя в переменной Choice

If Option1 = True Then

Choice = 1

Choice = 2If

Выгрузка диалогового окна

Unload Me Sub

Private Sub CancelButton_Click()

Выгрузка диалогового окна и выход

Unload Me

End

End Sub

Рисунок 8.2 - Внешний вид пользовательской формы InputsForm

 

Код обработки событий пользовательской формы InputsForm немного сложнее. В этом случае процедура UserForm_Initialize используется для копирования существующих входных параметров с листа Модель в поля ввода данных на форме. Процедура OKButton_Click применяется для копирования введенных пользователем данных обратно на лист Модель. Сначала проверяется правильность значений, введенных в текстовые поля. Если текстовое поле содержит некорректное значение, то пользовательская форма отображается повторно и в ней активизируется поле с ошибочным значением. Если значения введены правильно, то с помощью функции Val они (строковые значения) будут преобразованы в числовой формат и скопированы в соответствующие ячейки листа Модель. (Если бы текстовые поля возвращали значения типа Single или Integer, то функция Val оказалась бы не нужна. Но поскольку значение текстового поля копируется непосредственно в ячейки рабочего листа, то функция Val просто необходима, так как Excel будет интерпретировать значения ячеек как надписи, а потому не позволит выполнять над ними арифметические операции.)

8.2 Алгоритм процедуры входных данных модели (OptionsForm)

 

Рисунок 8.3 - Алгоритм процедуры входных данных модели

 

8.3Код обработки событий формы InputsForm

 

Private Sub UserForm_Initialize()

Dim ctl As Control, DayIndex As Integer

Вводит в поля значения из диапазонов Required,

BonusPct и MaxPct, если таковые существуют

For Each ctl In Me.Controls

If TypeName(ctl) = "TextBox" Then

Поля называются Day1Box-Day7Box. Первые три символа в

имени - "Day", а четвертый символ изменяется от 1 до 7

If Left(ctl.Name, 3) = "Day" Then

DayIndex = Mid(ctl.Name, 4, 1) .Text = Range("Required") _

.Cells(DayIndex) ctl.Name = "WeekdayBox" Then .Text = Range("WeekdayRate") ctl.Name = "WeekendBox" Then .Text = Range("WeekendRate") .Text = Range("MaxPct") If If SubSub OKButton_Click()ctl As Control, DayIndex As Integer

Проверяет введенные значения. Если найдены ошибочные

данные, то окно не выгружается, а процедура завершается

For Each ctl In Me.ControlsTypeName(ctl) = "TextBox" Thenctl.Text = "" Or Not IsNumeric(ctl.Text) Then "Введите числовое значение", _

vbInformation, "Некорректные данные"

ctl.SetFocus Sub Left(ctl.Name, 3) = "Day" And _ .Text < 0 Then

MsgBox "В поля вводятся целые " _

& " положительные числа", _

vbInformation, "Некорректные данные"

ctl.SetFocus Sub Left(ctl.Name, 4) = "Week" And _ .Text <= 0 Then

MsgBox "Ставка зарплаты представляется" _

& " положительным числом", _

vbInformation, "Некорректные данные"

ctl.SetFocus Sub Left(ctl.Name, 3) = "Max" And _

1)Then","_">(ctl.Text 1) Then "Процент сотрудников, имеющих " _

& " несмежные выходные, вводится в ", _

& " виде десятичной дроби", _

vblnformation, "Некорректные данные"

ctl.SetFocus Sub

End If

Если данные корректны, то они сохраняются в диапазоне

Required или MaxPct листа Модель. Текстовое поле

возвращает строку; функция Val конвертирует ее в число

If Left(ctl.Name, 3) = "Day" Then = Mid(ctl.Name, 4, 1)("Required").Cells(DayIndex) = Val(ctl.Text)ctl.Name = "WeekdayBox" Then("WeekdayRate") = Val(ctl.Text) ctl.Name = "WeekendBox" Then("WeekendRate") = Val(ctl.Text) ("MaxPct") = Val(ctl.Text)If If

Выгрузка диалогового окнаMe SubSub CancelButton_Click()

Выгрузка окна и выход

Unload Me

End Sub

 

8.4Алгоритм процедуры обработки событий (InputsForm)

 

Рисунок 8.4 - Алгоритм процедуры обработки событий

9.VBA-код модуля

 

Большая часть VBA-кода расположена в модуле. Сам код приводится ниже. Код имеет модульную структуру, что всегда считалось хорошим тоном в программировании. После объявления переменной Choice с областью действия Public переменная Main последовательно вызывает остальные процедуры.

 

9.1Объявление переменных с областью действия Public

 

Option Explicit

Переменная Choice принимает значение 1 или 2 в

зависимости от установленного переключателя в первом

диалоговом окнеChoice As Integer

 

9.2Код процедуры Main

 

Процедура Main выполняет в приложении управляющие функции и назначена кнопке, расположенной на листе Описание. Для выполнения расчетов процедура Main вызывает другие процедуры. Структура процедуры описывается в комментариях.

Sub Main ()

Запускается при щелчке на кнопке листа Описание

Отображается диалоговое окно Параметры приложения; дальнейшие

дейс?/p>