- •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. Исправление ошибок
- •Библиографический список
- •Оглавление
86
s=" "
For Each ЛИСТ In ActiveWorkbook.Worksheets s = s & " " & Item.Name
Next ЛИСТ
MsgBox "Рабочие Листы:" & vbCrLf & s End Sub
При выполнении этой процедуры функция MsgBox отображает строку, состоящую из свойств Name (Имя листа) каждого рабочего листа:
2.12.4. Инструкции перехода
Инструкции перехода часто используются в языках программирования. В них проверяется соответствие каким-то условиям и в зависимости от этого выполнение программы направляется по одной или другой ветви, или осуществляется безусловный переход в определённое место программы. В VBA предусмотрено две инструкции условного перехода:
If… Then... Else
Select Case
и инструкция безусловного перехода GoTo. К этой группе инструкций также относятся:
инструкции On Error GoTo метка, On Error Resume Next и On Error GoTo 0, служащие для перехода к обработчику ошибок;
инструкция Resume, возобновляющая выполнение процедуры после того, как заканчивает работу процедура обработки ошибок;
инструкция GoSub…Return, которая передаёт и возвращает управление выполнением процедуры подпрограмме внутри процедуры;
инструкции On…GoSub и On…GoTo, предназначенные для передачи управления выполнением программы на одну из нескольких определённых строк программы в зависимости от значения некоторого параметра;
инструкции Exit Do, Exit For, Exit Function и Exit Sub, используемые для прерывания выполнения блока Do…Loop, For…Next, Function и Sub.
2.12.4.1. Инструкция условного перехода If…Then…Else
Инструкция If...Then...Else задает выполнение определенных групп инструкций в зависимости от значения выражения. Она может иметь однострочный и два блоковых формата.
87
Однострочный формат:
If условие Then инструкции
Первый блоковый формат:
If условие Then [инструкции] [Else инструкции] [Else
[инструкции_Else]]
End If
Второй блоковый формат: If условие Then
[инструкции] [ElseIf условие Then
[инструкции_elseIf]]… [Else
[инструкции_else]]
End If
При этом ElseIf …Тhen может повторяться несколько раз.
В основу этой инструкции положен следующий принцип: если условие выполняется, то выполняются инструкция, находящиеся после Then.
Формат инструкции If...Then...Else содержит следующие элементы:
Элемент инструкции |
Описание элемента |
Условие |
Обязательный. Одно или более выражений следующих двух |
|
типов: численное или строковое выражение, которое приво- |
|
дится к значениям True или False. |
Инструкции |
Необязательный в блочной форме, но обязательный в од- |
|
нострочной форме, которая не имеет ветви Else. Один или |
|
несколько операторов; выполняются, если Условие имеет |
|
значение True. |
Однострочная форма допускает выполнение нескольких инструкций в результате проверки одного условия If…Then. При этом все инструкции должны находиться на одной строке и разделяться двоеточием, как показано в приведенном ниже примере:
Sub IfThenElse ()
Dim a As Single
Dim b As Single
Dim c As Single
a= Range("A1").Value
b= Range("A2").Value
If b = 0 Then MsgBox "Деление невозможно!" Else c = a / b: MsgBox "c=" & c End Sub
Пример блоковой формы:
Sub IfThenElse1 ()
Dim a As Single
88
Dim b As Single
Dim c As Single
a= Range("A1").Value
b= Range("A2").Value If b=0 Then
MsgBox "Деление на ноль невозможно!" Else
c = a / b MsgBox "c=" & c
End If
End Sub
Инструкция If…Then... Else применяется в следующих случаях:
1. Нужно проверить на соответствие одному или нескольким условиям и в случае соответствия сделать какое-то действие:
Option Compare Text
––––––––––––––––––––––––––––––––––––––––––––––––––
Sub IfThenElse2() Dim КурсРаб As String
If Range("a5").Value = "Неуд" Or Range("a5").Value = "" Then MsgBox "Небходимо защитить курсовую работу "
End If
End Sub
2.Нужно проверить на соответствие одному или нескольким условиям и в случае соответствия сделать какое-то действие, а в случае несоответствия выполнить другое действие:
Sub IfThenElse3() Dim КурсРаб As String
If Range("a5").Value = "Неуд" Or Range("a5").Value = "" Then MsgBox "Необходимо защитить курсовую работу"
Else
MsgBox "К экзамену по информатике допущен" End If
End Sub
Примечание
На уровне стандартного модуля, в котором находится процедура IfThenElse2, помещена инструкция Option Compare Text. Инструкция Option Compare применяется на уровне модуля перед первой процедурой модуля для задания используемого по умолчанию способа сравнения строковых данных.
Формат инструкции:
Option Compare Binary | Text | Database
Инструкция Option Compare указывает способ сравнения строк Binary, Text или Database для модуля. Если модуль не содержит инструк-
89
цию Option Compare, то по умолчанию используется способ сравнения Binary. Инструкция Option Compare Binary задает сравнение строк на основе порядка сортировки, определяемого внутренним двоичным представлением символов. В Microsoft Windows порядок сортировки определяется кодовой страницей символов. В следующем примере представлен типичный результат двоичного порядка сортировки:
A < B < E < Z < a < b < e < z < Б < Л < Ш < б < л < ш
Инструкция Option Compare Text задает сравнение строк без учета регистра символов на основе системной национальной настройки. Тем же символам, что и выше, при сортировке с инструкцией Option Compare Text соответствует следующий порядок:
(A=a) < (B=b) < (E=e) < (Z=z) < (Б=б) < (Л=л) < (Ш=ш)
Инструкция Option Compare Database может использоваться только в Microsoft Access.
Пример
В данном примере инструкция Option Compare используется для задания метода сравнения строковых данных, используемого по умолчанию.
Option compare Binary ' т.е. "AAA" < "aaa"
' Устанавливает метод сравнения строковых данных Binary. Option compare Text ' т. е. "AAA" = "aaa".
' Устанавливает метод сравнения строковых данных Text.
Для Option Compare Text буквы верхнего регистра эквивалентны буквам нижнего регистра, например, тексты Отлично и отлично не различаются.
Option Compare Database можно использовать только в MS Access.
3.В случае, если первая проверка вернула False, нужно проверить на соответствие еще нескольким условиям (в этом случае удобно использовать ElseIf).
Sub IfThenElse4()
If Range("a6").Value >= 0.84 Then
MsgBox "Ваша оценка """ & "Отлично" & """"
ElseIf Range("A6") < 0.84 And Range("A6") >= 0.67 Then MsgBox " Ваша оценка """ & "Хорошо" & """"
ElseIf Range("A6") < 0.67 And Range("A6") > 0.5 Then MsgBox " Ваша оценка """ & "Удовлетворительно" & """"
Else
MsgBox " Ваша оценка """ & "Неудовлетворительно" & """"
End If
End Sub
Некоторые замечания по использованию If…Then... Else:
ключевое слово Then должно находиться в одной строке с If и условием. Если вы перенесете его на следующую строку, будет выдано сообщение об ошибке;
если разместить команду, которую нужно выполнить при истинности проверяемого условия на одной строке с If и Then, то End If можно не писать: