Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Макросы.doc
Скачиваний:
26
Добавлен:
21.11.2018
Размер:
16.91 Mб
Скачать

Проверка вводимых данных

После того как пользователь ввел всю нужную информацию в форму, он щелкает на кнопке Сохранить. Что должно произойти после этого? Процедура, которая запускается на исполнение после щелчка на кнопке Сохранить, должна проверить правильность введенных данных и в случае их корректности записать данные в рабочий лист.

Начнем с проверки правильности данных. Понятие правильности (корректности) данных зависит от выполняемого приложения. Поле ввода может принять все, что вы способны ввести с клавиатуры. И если вы ввели какую-нибудь абракадабру, то это не значит, что введенное значение некорректно. Все зависит от тех ограничений, которые накладывает приложение на вводимые данные. Например, на разрабатываемой нами экранной форме есть поле ввода Номер комнаты. Очевидно, что корректными значениями для этого поля будут целые положительные числа. Далее предположим, что в нашем отеле сдаются только комнаты с номерами от 101 до 730. В этом случае корректными данными для поля будут лишь целые числа из указанного интервала. Аналогичные ограничения должны накладываться на значения полей Тип расходов, Сумма, Дата, а также на значения полей группы Способ оплаты. (Обратите внимание на маленькую, но существенную деталь: проверку поля сумму и полей с данными о кредитной карте надо выполнять только тогда, когда эти поля разблокированы.)

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

  1. В редакторе Visual Basic отобразите разрабатываемую форму.

  2. Дважды щелкните на кнопке Сохранить. В окне кода появится заголовок процедуры cmdSave_Click.

  3. Введите следующий код этой процедуры:

If Val(txtRoomNumber.Text) < 101 Or _

Val(txtRoomNumber.Text) > 730 Then

 MsgBox "Неправильный номер комнаты"

 txtRoomNumber.SetFocus

 Exit Sub

End If

If txtGuestName.Text = "" Then

 MsgBox "Пожалуйста, введите имя гостя"

 txtGuestName.SetFocus

 Exit Sub

End If

If chkTipIncluded.Value = True Then

 If txtTipAmount = " " Then

  MsgBox "Если установлен флажок "Включить", _

   то надо ввести число в поле "сумму" "

  txtTipAmount.SetFocus

  Exit Sub

 End If

End If

If txtAmount.Text = "" Then

 MsgBox "Пожалуйста, введите сумму расходов"

 txtAmount.SetFocus

 Exit Sub

End If

If IsNumeric(txtAmount.Text) = False Then

 MsgBox "Сумма должна быть числом"

 txtAmount.SetFocus

 Exit Sub

End If

If txtDate.Text = "" Then

 MsgBox "Необходимо ввести дату"

 txtDate.SetFocus

 Exit Sub

End If

If optCreditCard.Value = True Then

 If txtCardNumber = "" Then

  MsgBox "Пожалуйста, введите номер кредитной карты"

  txtCardNumber.SetFocus

  Exit Sub

 End If

 If txtExpires.Text = "" Then

  MsgBox "Введите дату окончания карты"

  txtExpires.SetFocus

  Exit Sub

 End If

End If

Unload Me

  1. Перейдите в рабочую книгу и щелкните на командной кнопке, отрывающей форму.

  2. Щелкните на кнопке Сохранить. Появится окно с сообщением: "Неправильный номер комнаты" (рис. 15.5).

  3. Щелкните на кнопке ОК, чтобы закрыть окно сообщения. Введите 121 в поле Номер комнаты и щелкните на кнопке Сохранить. В другом появившемся окне сообщения щелкните на кнопке ОК.

  4. Введите свое имя как имя гостя. Введите 20 в поле Сумма.

  5. Щелкните на флажке Включить, а затем на кнопке Сохранить. Появится очередное окно сообщения с предложением ввести данные в поле сумму. Щелкните на кнопке ОК, чтобы закрыть это окно.

  6. Введите число 2 в поле сумму и щелкните на кнопке Сохранить. Форма исчезнет с экрана.

Вы, конечно, заметили, что в этой процедуре проверялись свойства Text и Value элементов управления. Рассмотрим подробнее код одной такой проверки, показанный в листинге 15.2.

Листинг 15.2. Проверка значения поля Номер комнаты

1: If Val(txtRoomNumber.Text)<101 Or Val(txtRoomNumber.Text)>730 Then

2:  MsgBox "Неправильный номер комнаты"

3:  txtRoomNumber.SetFocus

4:  Exit Sub

5: End If

Здесь оператор If проверяет, находится ли значение поля txtRoomNumber (Номер комнаты) в интервале от 101 до 730. Отметим применение функции Val, преобразующей строковое значение в числовое. Она необходима из-за того, что значение свойства Text (т.е. введенное в поле значение) имеет строковый (текстовый) тип данных. Вы обратили внимание, что здесь нет проверки той ситуации, когда пользователь вообще ничего не ввел в это поле? Просто эта ситуация подпадает под тот случай, когда введенное значение меньше 101.

Рис. 15.5. Одно из многих окон с сообщениями о некорректности введенных данных

Метод SetFocus делает активным указанный элемент управления формы. Оператор выхода из процедуры Exit Sub используется после каждой проверки, так как нет смысла продолжать процедуру, если ошибка обнаружена и выведено соответствующее окно сообщения. Если ошибки не обнаружены, то с помощью оператора Unload Me форма выгружается из памяти компьютера и удаляется с экрана.