Метод создания рабочего расписания
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
а по воскресенье). Поля для указания ставки заработной платы называются 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>