
- •1.Программирование в vba. Объекты Application, Workbook, Worksheet и Range
- •2.Редактор Visual Basic
- •2.1.Запуск программы
- •2.1.1.Панель инструментов Стандарт
- •2.2.Отладка программ
- •2.2.1.Ошибки при написании программ
- •2.2.1.1.Ошибки компиляции
- •2.2.1.2.Ошибки выполнения
- •2.2.2.Инструкция Option Explicit
- •2.2.3.Пошаговое выполнение программ
- •2.2.4.Точка останова (Toggle Breakpoint)
- •2.2.5.Отслеживание значений свойств и переменных
- •3.Объекты Application, Workbook, Worksheet и Range. Встроенные функции Dir, MkDir, MsgBox, InputBox
- •3.1.Программа СлучайныеЧисла
- •3.2.Программа УдалениеКниги
- •3.3.Программа СлучайныеЧислаОформление
- •4.Переменные
- •4.1.Объектные переменные
- •4.2.Пользовательский тип данных
- •5.Массивы
- •5.1.1.Функция Erase
- •5.1.2.Функции lBound и uBound
- •6.Подпрограммы. Функции. Область видимости переменных, подпрограмм и функций.
- •6.1.Вызов подпрограммы
- •6.2.Передача данных при вызове программы
- •6.2.1.Передача по ссылке и по значению
- •6.3.Функции
- •6.4.Область видимости переменных
- •6.4.1.Переменные уровня процедуры
- •6.4.2.Переменные уровня модуля
- •6.4.3.Переменные уровня проекта
- •6.4.4.Сохраняемые переменные
- •6.4.5.Область видимости подпрограмм и функций
- •6.4.6.Сохраняемые подпрограммы и функции
- •7.Управляющие структуры: If-Then-Else, Select Case, For-Next, While-Wend, Do-Loop, For-Each-Next
- •8.Инструкция With
- •9.Встроенные функции vba
- •9.1.Математические функции
- •9.2.Функции проверки типов
- •9.3.Функции преобразования форматов
- •9.4.Функции обработки строк
- •9.5.Функции времени и даты
- •10.Обработка ошибок: инструкция On Error
- •11.Пользовательский интерфейс
- •11.1.Создание формы (UserForm) и добавление кнопок (СоmmandButton)
- •11.2.Вывод формы на экран (запуск формы)
- •11.3.Поле (TextBox) и надпись (Label).
- •11.4.Список (ListBox) и поле со списком (ComboBox)
- •11.4.1.Список (ListBox)
- •11.4.2.Определение выбранных элементов списка
- •11.4.3.Поле со списком (ComboBox)
- •11.4.4.Определение выбранного элемента
- •11.4.5.Создание взаимосвязанных элементов управления
- •11.5.Флажок (CheckBox)
- •11.6.Выключатель (ToggleButton)
- •11.7.Переключатель (OptionButton)
- •11.8.Счетчик (SpinButton)
- •11.9.Создание нестандартных меню и панелей инструментов.
- •11.9.1.Пример создания/удаления панели инструментов
- •11.9.2.Пример создания/удаления меню
- •12.События объектов Workbook и Worksheet
- •12.1.События объекта Workbook
- •12.2.События объекта Worksheet
- •Домашнее задание №1
- •Домашнее задание №2 и №3. Типовые варианты.
- •Вариант 1. Домашнее задание №2
- •Списочный состав института
- •Домашнее задание №3
- •Вариант 2. Домашнее задание №2
- •Списочный состав института
- •Домашнее задание №3
- •Вариант 3. Домашнее задание №2
- •Домашнее задание №3
- •Вариант 4. Домашнее задание №2
- •Домашнее задание №3
- •Вариант 5. Домашнее задание №2
- •Домашнее задание №3
2.2.1.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 -7):
Рис. 2‑7. Ошибка выполнения: деление на ноль
Если щелкнуть по кнопке Debug (Отладка), то строка, в которой произошла ошибка, будет выделена желтым цветом и программа перейдет в режим прерывания. При наведении мышиного курсора на переменную х на экране появится всплывающая подсказка с текущим значением (Рис. 2 -8).
Щелкнув по кнопке Сброс на панели инструментов Стандарт (Рис. 2 -3), завершите выполнение программы.
Рис. 2‑8. Программа Обратное_число в режиме прерывания
Другим примером ошибки выполнения может служить программа УзнатьАвтора. Скопируйте её в книгу Мои программы.xls (в Модуль2), а книгу Мои таблицы.xls закройте. Теперь, при запуске этой программы, возникнет ошибка с кодом 9 – Индекс выходит за пределы допустимого диапазона (Рис. 2 -9). Эта ошибка возникает тогда, когда программа ссылается на несуществующий объект3.
Рис. 2‑9. Ссылка на несуществующий объект 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
Задания:
В Модуле 2 введите программу СсылкаНаКнигуПоИндексу.
Протестируйте работу этой программы, когда книга Мои таблицы.xls открыта/закрыта.
2.2.2.Инструкция Option Explicit
Простейшим средством предотвращения случайных ошибок является использование инструкции Option Explicit, которая предписывает объявлять все переменные, встречающиеся в программе. Использование этой инструкции позволяет избежать такой трудно отслеживаемой ошибки как использование разных алфавитов при именовании одной и той же переменной. Например, в одном месте программы вы набрали имя переменной СуммаБаллов буквами русского алфавита, а в другом первую букву этой переменной случайно сделали латинской. Визуально между ними нет никакой разницы. Однако программа воспринимает их как названия разных переменных. Понятно, что результаты такой ошибки могут быть очень серьёзными. При использовании же инструкции Option Explicit такая ошибка была бы обнаружена сразу – компилятор указал бы на переменную СуммаБаллов с латинской буквой «с» как на необъявленную.