- •2.1. Алфавит и словарь языка
- •2.2. Переменные
- •2.3. Константы
- •2.4. Строковые переменные
- •2.5. Массивы
- •2.6. Пользовательские типы данных
- •2.7. Операции VBA
- •2.8. Объектная модель Excel
- •2.8.1. Свойства и методы объектов
- •2.8.2. Отображение объектной модели Excel
- •2.8.2.1. Иерархия объектной модели
- •2.8.2.2. Ссылка на объекты в коде VBA
- •2.8.3. Работа с объектами
- •2.8.3.1. Задание свойств объекта
- •2.8.3.2. Использование методов объекта
- •2.8.3.3. Переменные-объекты
- •2.8.3.4. Коллекции
- •2.8.3.5. Метод Add
- •2.8.3.6. Свойство Count
- •2.8.4. Свойства и методы основных объектов Excel
- •2.8.4.1. Объект Application
- •2.8.4.2. Объект Worksheet
- •2.8.4.3. Объект Range
- •2.8.5. Просмотр объектов
- •2.8.6. Использование справочной системы
- •2.8.6.1. Использование функциональной клавиши F1
- •2.8.6.2. Использование помощника
- •2.9. Ввод и вывод данных
- •2.9.3. Метод InputBox
- •2.9.4. Объединение текстовых строк
- •2.10. Концепция событий Excel
- •2.10.1. Типы событий Excel
- •2.10.2. События объекта Workbook
- •2.10.3. События объекта Worksheet
- •2.10.4. События объекта Application
- •2.10.5. События объекта UserForm
- •2.10.6. События, не связанные с конкретными объектами
- •2.10.6.1. Метод OnKey
- •2.10.6.2. Событие OnTime
- •2.11. Формы пользователя
- •2.11.1. Свойства, методы и события экранных форм
- •2.11.1.1. Некоторые свойства форм
- •2.11.1.2. Некоторые методы форм
- •2.11.1.3. Некоторые события форм
- •2.11.2. Элементы управления
- •2.11.2.1. Элемент управления Label (Надпись)
- •2.11.2.1.1. Окно свойств формы
- •2.11.2.2. Элемент управления CommandButton (Кнопка)
- •2.11.2.3. Элемент управления TextBox (Текстовое поле)
- •2.11.2.4. Элемент управления ComboBox (комбинированный список)
- •2.11.2.5. Элемент управления ListBox (список)
- •2.11.2.6. Элемент управления CheckBox (Флажок)
- •2.11.2.7. Элемент управления ToggleButton (Выключатель)
- •2.11.2.8. Элемент управления OptionButton (Переключатель)
- •2.11.2.9. Элемент управления Image (Рисунок)
- •2.11.2.12. Элемент управления RefEdit (Поле со свёртыванием)
- •2.11.2.13. Элементы управления на рабочем листе
- •2.12. Инструкции VBA
- •2.12.1. Оператор присваивания
- •2.12.2. Инструкция Set
- •2.12.3. Циклы
- •2.12.3.1. Инструкция For… Next
- •2.12.3.2. Инструкция While…Wend
- •2.12.3.3. Инструкция Do... Loop
- •2.12.3.4. Инструкция For Each…Next
- •2.12.4. Инструкции перехода
- •2.12.4.1. Инструкция условного перехода If…Then…Else
- •2.12.4.2. Инструкция Select…Case
- •2.12.4.3. Инструкция безусловного перехода GoTo
- •2.12.4.4. Инструкции перехода к обработчику ошибок On Error
- •2.12.4.5. Инструкции прерывания выполнения блока Exit
- •2.13. Функции VBA
- •2.13.1. Встроенные функции
- •2.13.1.1. Математические функции
- •2.13.1.2. Функции преобразования данных
- •2.13.1.3. Функции даты и времени
- •2.13.1.4. Строковые функции
- •2.13.1.5. Примеры использования функций VBA
- •2.13.1.5.1. Удаление ненужных символов
- •2.13.1.5.2. Определение длины строки
- •2.13.1.5.3. Сравнение и поиск строк
- •2.13.1.5.4. Выделение части строки
- •2.13.1.5.5. Форматирование значений данных
- •2.13.2. Функции, определённые пользователем
- •2.14. Файлы VBA
- •2.14.1. Типы файлов в VBA
- •2.14.2. Открытие и закрытие файла
- •2.14.3. Ввод данных в файл последовательного доступа
- •2.14.4. Вывод данных из файла последовательного доступа
- •2.14.5. Работа с файлом произвольного доступа
- •2.15. Создание процедуры
- •2.16. Выполнение процедуры
- •2.17. Сохранение процедуры
- •2.18. Запись последовательности действий пользователя
- •2.19. Просмотр кода макроса
- •3.1. Тестирование и отладка как этап разработки приложений
- •3.1.1. Отладка
- •3.1.1.1. Режим останова
- •3.1.1.2. Использование окна Immediate
- •3.1.1.2.1. Просмотр значений в окне Immediate
- •3.1.1.3. Пошаговое выполнение программ
- •3.1.2. Исправление ошибок
- •Библиографический список
- •Оглавление
94
2.12.4.5. Инструкции прерывания выполнения блока Exit
Имеются следующие варианты инструкции Exit:
Инструкция Exit Do позволяет выйти из цикла Do…Loop.
Инструкция Exit For позволяет выйти из цикла For…Next или
For Each…Next.
Инструкция Exit Function позволяет выйти из функции, в которой имеется данная инструкция.
Инструкция Exit Sub позволяет выйти из процедуры Sub, в ко-
торой имеется данная инструкция.
Пример
Приведённая ниже процедура ПримерExit использует инструкцию Exit для выхода из циклов For...Next и Do...Loop и процедуры Sub. Символ двоеточие используется для разделения инструкций в одной строке кода.
Sub ПримерExit ()
Dim I, MyNum |
|
Do |
' Устанавливается бесконечный цикл. |
For I = 1 To 5 ' Цикл повторяется 5 раз.
MyNum = Int(Rnd * 10) ' Генерируется случайное число.
Select Case MyNum ' Определяется значение случайного числа.
Case 3: |
MsgBox "Case 3": |
Exit For |
' Если 3, то выход из For...Next. |
Case 2: |
MsgBox "Case 2": |
Exit Do |
' Если 2, то выход из Do...Loop. |
Case 5: MsgBox "Case 5": Exit Sub ' Если 5, то выход из процедуры. End Select
Next I
Loop
End Sub
2.12.4.6.Инструкция передачи управления выполнением процедуры подпрограмме внутри процедуры GoSub… Return
Инструкция имеет следующий формат:
GoSub метка
[инструкции или процедура]
метка
[инструкции подпрограммы]
Return
95
Инструкции GoSub и Return можно использовать в любом месте процедуры, но GoSub и соответствующая ему инструкция Return должны быть в одной и той же инструкции. Подпрограмма может иметь более одной инструкции Return.
Пример
В приводимой ниже процедуре ПримерGosub вводится с клавиатуры число и выполняется подпрограмма, имеющая метку Ппр1, если число положительное, или подпрограмма, имеющая метку Ппр2, если число отри-
цательное. |
Процедура |
завершается |
выполнением |
инструкции |
If Num > 0 Then MsgBox " Результат деления = " & Num. |
|
Sub ПримерGosub()
Dim Num As Single
Num = InputBox("Введите положительное число")
If Num > 0 Then
GoSub Ппр1
'Подпрограмма Ппр1 выполняется,
'если пользователь вводит положительное число. Else
GoSub Ппр2 End If
If Num > 0 Then MsgBox "Результат деления = " & Num Exit Sub
Ппр1:
Num = Num / 2
Return 'Возврат из подпрограммы Ппр1
'в управление выполнением процедуры ПримерGosub.
Ппр2:
MsgBox "Введено отрицательное число " & Num Return
End Sub
2.12.4.7.Инструкция передачи управления выполнением процедуры на одну из нескольких строк кода On…GoSub и On…GoTo
Инструкции On…GoSub и On…GoTo предназначены для передачи управления выполнением программы на одну из нескольких определённых строк программы в зависимости от значения некоторого параметра. Эти инструкции имеют следующий формат:
On выражение GoSub список_назначений On выражение GoTo список _назначений
Формат инструкций On…GoSub и On…GoTo содержит следующие элементы:
96
Элемент инструкции |
Описание элемента |
Выражение Обязательный. Любое числовое выражение, которое имеет целое значение от 0 до 255 включительно. Если выражение
является нецелым числовым выражением, оно округляется до его оценки
Список_назначений Обязательный. Список номеров строк или меток строк, разде-
ляемых запятыми
Замечания
Значение элемента выражение определяет, к какой строке из элемента список_назначений выполняется переход. Если значение выражения меньше 1 или превышает число элементов списка, происходит одно из следующих событий:
Если выражение |
|
|
то |
|
|
Равняется 0 |
Управление |
передается |
инструкции, |
следующей |
за |
|
On...GoSub или On...GoTo |
|
|
|
|
Превышает число |
Управление |
передается |
инструкции, |
следующей |
за |
элементов списка |
On...GoSub или On...GoTo |
|
|
|
|
Отрицательное |
Возникает ошибка |
|
|
|
|
Больше 255 |
Возникает ошибка |
|
|
|
В одном списке допускается совместное использование номеров и меток строк. Не существует практического ограничения на число меток и номеров строк, используемых с инструкциями On...GoSub... и On...GoTo. Однако при использовании большего число меток или номеров, чем может уместиться на одной строке, необходимо применять символ продолжения строки для распространения логической строки на несколько физических строк. Инструкция Select Case обеспечивает более структурированный и гибкий способ выполнения множественных ветвлений.
Пример
В данном примере инструкции On...GoSub и On...GoTo используются для перехода к подпрограммам и строкам с указанными метками.
Sub OnGosubGoto() Dim №_стр, Строка, n Ввод:
№_стр = InputBox("Введите номер метки/строки") If №_стр = "" Then GoTo Ввод
On №_стр GoSub М1, М2 ' Управление возвращается сюда ' после выполнения On...GoSub
On №_стр GoTo 1, 2 ' Управление не возвращается сюда ' после выполнения On...GoTo.
Exit Sub М1:
MsgBox "Выполнен переход на метку М1": Return М2:
MsgBox "Выполнен переход на метку М2": Return