Ошибки при написании программ
Создавая программу, даже опытный программист допускает ошибки. Все ошибки условно можно разделить на три группы: ошибки компиляции, выполнения и логики. Рассмотрим те ошибки, которые «ловит» Visual Basic.
Ошибки компиляции
Ошибки компиляции возникают тогда, когда Visual Basic не может интерпретировать введенный код. Это происходит, например, при неправильном вводе числа скобок, неправильном имени, неполной инструкции и т.д. Строка, в которой обнаружена ошибка (после того как нажата клавиша [Enter]), выделяется красным цветом, и на экране появляется диалоговое окно с сообщением о возможной ошибке (Рис. 2‑8).
Рис. 2‑8. Ошибка компиляции, обнаруженная при вводе:
не хватает круглой скобки
Другие ошибки компиляции выявляются сразу же после запуска программы. В этом случае предполагаемое местоположение ошибки выделяется синим цветом и на экране появляется диалоговое окно с сообщением об ошибке (Рис. 2‑9).
Рис. 2‑9. Ошибка компиляции, обнаруженная после запуска программы:
цикл For без своего завершения (Next)
Задание:
1. В файлеМои программы.xls в Модуле1 наберите программу СлучайныеЧисла, которая разыгрывает 10 случайных чисел и помещает их в первые 10 ячеек первого столбца:
Sub СлучайныеЧисла()
Dim СлучЧисло As Integer
For i = 1 To 10
СлучЧисло = Int(100 * Rnd())
Cells(i, 1).Value = СлучЧисло
Next i
MsgBox "Случайные числа разыграны!"
End Sub
2. Сгенерируйте описанные выше ошибки.
Ошибки выполнения
Возникают после успешной компиляции программы при её выполнении. Причинами таких ошибок могут быть:
§ несоответствие типов данных,
§ некорректность вычислений, например, деление на ноль или вычисление квадратного корня из отрицательного числа,
§ некорректность операций с файлами, например, удаление открытой рабочей книги, сохранение рабочей книги с именем открытого файла и т.д.
С ошибкой выполнения познакомимся на следующем примере. Для этого в
Модуле2 наберите программу Обратное_число:
Sub ОбратноеЧисло()
Dim x As Double
Dim y As Double
x = CDbl(InputBox("Введите число:"))
y = 1/x
MsgBox "Обратное число:" & y
End Sub
и запустите её на выполнение (попутно обратите внимание на встроенную функцию InputBox). На экране появится диалоговое окно с запросом, – введите в него 0 и щелкните по кнопке ОК. Так как деление на ноль запрещено, VB отобразит окно с сообщением о номере ошибки и причине, её вызвавшей (Рис. 2‑10):
Рис. 2‑10. Ошибка выполнения: деление на ноль
Если щелкнуть по кнопке Debug (Отладка), то строка, в которой произошла ошибка, будет выделена желтым цветом и программа перейдет в режим прерывания. При наведении мышиного курсора на переменную х на экране появится всплывающая подсказка с текущим значением (Рис. 2‑11).
Щелкнув по кнопке Сброс на панели инструментов Стандарт (Рис. 2‑6), завершите выполнение программы.
Рис. 2‑11. Программа Обратное_число в режиме прерывания
Другим примером ошибки выполнения может служить программа УзнатьАвтора. Скопируйте её в книгу Мои программы.xls (в Модуль2), а книгу Мои таблицы.xls закройте. Теперь, при запуске этой программы, возникнет ошибка с кодом 9 – Индекс выходит за пределы допустимого диапазона (Рис. 2‑12). Эта ошибка возникает тогда, когда программа ссылается на несуществующий объект[3].
Рис. 2‑12. Ссылка на несуществующий объект Workbooks("Мои таблицы.xls")
Следующая программа работает корректно вне зависимости от того, открыта книга Мои таблицы.xls или нет:
Sub СсылкаНаКнигуПоИндексу()
'1. Объявляем переменные:
Dim Автор As String
Dim КолОткрытыхКниг As Integer
'2. Определяем количество открытых книг:
КолОткрытыхКниг = Workbooks.Count
'3. Ищем среди открытых книг книгу с именем Мои таблицы.xls:
For i = 1 To КолОткрытыхКниг
If Workbooks(i).Name = "Мои таблицы.xls" Then
Автор = Workbooks(i).Author
MsgBox "Автор этой книги: " & Автор
Exit Sub
End If
Next i
MsgBox "Книга Мои таблицы.xls среди открытых книг не найдена!"
End Sub
Задания:
1. В Модуле 2 введите программу СсылкаНаКнигуПоИндексу.
2. Протестируйте работу этой программы, когда книга Мои таблицы.xls открыта/закрыта.