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

10.5. Функции времени и даты

Функция

Возвращаемое значение

Date ()

Возвращает значение типа Variant, содержащее текущую системную дату:

MyDate = Date()' возвращает 12.09.2012, если сегодня 12 сентября 2012 года

Day, Month, Year

Возвращает значение типа Variant (Integer), содержащее целое число, которое представляет день, месяц, число в значении даты:

MyDay = Day(Date)' возвращает 12, если сегодня 12 число

MyMonth = Month(Date)' возвращает 9, если сегодня сентябрь

MyYear = Year(Date)' возвращает 2012, если сегодня 2012-й год

11. Обработка ошибок

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

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

2-й способ – обрабатывающий ошибки. В случае появления ошибки программа перехватывает её и создает программный отклик.

Как правило, в программировании сочетаются оба способа.

11.1. Предотвращение ошибок программными средствами

Рассмотрим программу, которая вычисляет обратное число и выводит его на экран:

Sub ОбратноеЧисло()

Dim x As Double

Dim y As Double

x = CDbl(InputBox("Введите число:"))

y = 1/x

MsgBox "Обратное число:" & y

End Sub

где СDbl – функция преобразования типов (строковое значение преобразуется в число типа Double).

Даже в этой простой программе имеются свои подводные камни, – например, пользователь по невнимательности забудет ввести число, или введет его неправильно (символ вместо числа, десятичную точку вместо десятичной запятой), или введет ноль. Во всех этих случаях произойдет аварийное завершение программы, и программа выдаст сообщение об ошибке: либо о несоответствии типов (рис. 11.1), либо о делении на ноль (11.2).

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

Рис. 11.1. Ошибка несоответствия типов

Рис. 11.2. Ошибка деления на ноль

Например, так:

Sub ОбратноеЧисло()

Dim x As Double

Dim y As Double

Dim Число As String

Число = InputBox("Введите число:")

‘Функция IsNumeric проверяет, является ли _

введенная последовательность числом:

If IsNumeric(Число) = False Then

MsgBox "Некорректный ввод исходного значения!", _

vbExclamation, "Обратное число"

Exit Sub

End If

x = CDbl(Число)

If CDbl(Число) = 0 Then

MsgBox "Деление на ноль запрещено!", _

vbExclamation, "Обратное число "

Exit Sub

End If

y = 1/x

MsgBox "Обратное число:" & y

End Sub

Попробуем теперь решить эту проблему с помощью перехвата ошибок и их обработки. Для этого предназначена инструкция On Error.

11.2. Обработка ошибок, инструкция On Error

Инструкция On Error может быть записана следующим образом:

Инструкция

Описание

On Error GoTo строка

В случае возникновении ошибки управление передается в строку с указанным номером или меткой.

On Error Resume Next

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

Инструкция Resume допустима в следующих синтаксисах:

  • Resumeуправление передается той инструкции, в которой произошла ошибка.

Пример: On Error Resume;

  • Resume строка – управление передается в строку с указанным номером или меткой.

Пример: On Error Resume m1 – управление передается в строку с меткой m1;

  • Resume Next – см. выше.

On Error GoTo 0

Отключает обработчик ошибок в текущей процедуре.

Объект Err

Процедура обработки ошибок обычно включает объект Err, который содержит всю информацию о последней ошибке.

Рассмотрим два важнейших свойства объекта Err:

Свойство

Описание

Number

Возвращает код ошибки.

Description

Возвращает текст сообщения об ошибке

Пример:

ОбработкаОшибок:

MsgBox "Произошла ошибка: " & _

Cstr(Err.Number) & "-" & _

Err.Description, vbInformation, _

"Cообщение об ошибке"

Объект Err имеет свои методы:

Метод

Описание

Clear

Очищает все значения свойств объекта Err.

Raise

Создает ошибку выполнения. Используется при моделировании ошибок.

Напишем программу ОбратноеЧислоError, в которой ошибки обрабатываются с помощью конструкции On Error:

Sub ОбратноеЧислоError ()

Dim x As Double

Dim y As Double

Dim Число As String

'Передача управления на обработчик ошибок, _ помеченный меткой Ошибка:

On Error GoTo Ошибка

x = CDbl(InputBox("Введите число:"))

y = 1 / x

MsgBox "Обратное число:" & y

Exit Sub

'Обработчик ошибок

Ошибка:

MsgBox "Произошла ошибка: " & _

Cstr(Err.Number) & "-" & _

Err.Description, vbInformation, _

"Cообщение об ошибке"

Select Case Err.Number

Case 11

MsgBox "Деление на ноль запрещено!", _

vbExclamation, "Обратное число "

Case 13

MsgBox "Некорректный ввод исходного значения!", _

vbExclamation, "Обратное число"

Case Else

MsgBox "Непредвиденная ошибка!", _

vbExclamation, "Обратное число"

End Select

End Sub

Обратите внимание на 10-ю строку кода, которая обеспечивает выход из процедуры перед активизацией обработчика ошибок. При её отсутствии управление передается на следующую команду, т.е. будет выведено сообщение об ошибке, даже если её и нет.

13-я строка кода приведена лишь в учебных целях, для неискушенного пользователя она не понятна!

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