- •Создание динамических структур данных
- •Встроенный динамический класс Collection
- •Создание собственных динамических классов
- •Обертывание коллекции vba
- •Несколько слов об api, Win32, dll
- •Вызов функций и оператор Declare
- •Две кодировки ansi и Unicode
- •Два языка: c и vb. Различия при вызове функций
- •Соответствие между простыми типами данных
- •Структуры языка c и тип, определенный пользователем, в языке vba
- •Об описателях языка c и объектах Windows
- •Void функции языка c
- •Вызов аргументов по ссылке ByRef и по значению ByVal
- •Строковые аргументы при вызове функций Win32 api
- •Примеры работы с Win32 api функциями
- •Работа с окнами
- •Характеристики окружения
- •Вызов функций Win32 api, работающих в Unicode кодировке
- •Обработка ошибок, возникающих при вызове функций Win32 api
- •Функции api и вызов Callback функций
- •Функции высших порядков и конструкция AddressOf
- •Функции перечисления Win32 api
- •Функция EnumWindows
- •Еще один пример работы с функцией EnumWindows
- •Функции Win32 api для работы с таймером
- •Функция SetTimer
- •Функция обратного вызова TimerProc
- •Функция KillTimer
- •Пример создания, работы и удаления таймера
- •Классы как обертка вызовов функций Win32 api
- •Построение класса "ВашТаймер"
- •Использование класса ВашТаймер
- •Операторы
- •Операторы и строки
- •Оператор комментария
- •Присваивание
- •Оператор Let
- •Оператор lSet
- •Оператор rSet
- •Оператор Set
- •Управляющие операторы
- •Условный оператор If Then Else End If
- •Оператор выбора Select Case
- •Цикл For Next
- •Цикл Do...Loop
- •Цикл While...Wend
- •Цикл For Each...Next
- •Работа с каталогами, папками и файлами
- •Изменение текущего диска: оператор ChDrive
- •Изменение текущего каталога (папки): оператор ChDir
- •Создание каталога (папки): оператор MkDir
- •Переименование каталогов (папок) и файлов: оператор Name
- •Удаление каталога (папки): оператор RmDir
- •Установка атрибутов файла: оператор SetAttr
- •Копирование файлов: оператор FileCopy
- •Удаление файлов: оператор Kill
- •Прочие операторы
- •Операции с одним объектом. Оператор With
- •Операции
- •Работа с числовыми данными
- •Математические функции
- •Работа со строками
- •Сравнение строк
- •Сравнение с образцом
- •Основные операции над строками
- •Новые функции для работы со строками
- •Функция InStrRev - поиск последнего вхождения подстроки
- •Функция Replace - замена всех вхождений подстроки
- •Удаление подстроки
- •Разбор строки. Функции Split, Join и Filter
- •Преобразование строки в массив. Функция Split
- •Сборка элементов массива в строку. Функция Join
- •Фильтрация элементов массива. Функция Filter
- •Несколько модификаций встроенных функций
- •Замена, основанная на шаблоне. Функция WildReplace
- •Замена разных символов строки. Функция CharSetReplace
- •Фильтрация, основанная на шаблоне. Функция WildFilter
- •Разбор строки, допускающей разные разделители ее элементов. Функция WildSplit
- •Работа с датами и временем
- •Присваивание значений
- •Встроенные функции для работы с датами
- •Определение текущей даты или времени.
- •Вычисления над датами
- •Функция Timer и хронометраж вычислений
- •Некоторые встроенные функции
- •Функции проверки типов данных
- •Преобразование типов данных
- •Форматирование данных. Функции группы Format
- •Функция Format.
- •Другие функции форматирования
- •Описание и создание процедур
- •Классификация процедур
- •Синтаксис процедур и функций
- •Функции с побочным эффектом
- •Создание процедуры
- •Создание процедур обработки событий
- •Вызовы процедур и функций Вызовы процедур Sub
- •Вызовы функций
- •Использование именованных аргументов
- •Аргументы, являющиеся массивами
- •Конструкция ParamArray
- •Задача о медиане
- •Пользовательские функции, принимающие сложный объект Range
- •Рекурсивные процедуры
- •Деревья поиска
- •Класс TreeNode
- •Класс BinTree
- •Работа со словарем
- •Отладка
- •Написание надежных программ
- •Искусство отладки
- •Средства отладки
- •Панель отладки и команды меню
- •Окна наблюдения
- •Окно локальных переменных - Locals
- •Окно проверки - Immediate
- •Окно контрольных выражений - Watch
Управляющие операторы
Набор управляющих операторов VBA делает честь любому хорошо структурированному языку программирования. Циклы с возможной проверкой условия в начале, в конце и в середине работы оператора, обычный оператор If и оператор разбора случаев Case - все эти средства позволяют организовать процесс вычислений надежно и эффективно в соответствии с лучшими традициями программирования.
Условный оператор If Then Else End If
Это общепринятый в языках программирования оператор управления вычислениями позволяет выбирать и выполнять действия в зависимости от истинности некоторого условия.
Синтаксис.
Имеется два варианта синтаксиса: в одну строку и в форме блока. В первом случае он имеет вид:
If условие Then [операторы1] [Else операторы2 ]
Во втором случае оператор расположен на нескольких строках:
If условие Then
[операторы]
[ElseIf условие-n Then
[операторы-n]...
[Else
[ИначеОператоры]]
End If
Здесь условие обязательно в обоих вариантах. Оно может быть числовым или строковым выражением со значениями True или False (Null трактуется как False). В качестве условия можно использовать и выражение вида TypeOf ИмяОбъекта Is ТипОбъекта, где ИмяОбъекта - ссылка на объект, а ТипОбъекта - произвольный корректный тип объекта. Операторы1 и операторы2 - это последовательности из одного или нескольких разделенных двоеточием операторов. По крайней мере, одна из этих последовательностей должна быть непустой. Если условие истинно (True), выполняется последовательность операторы1, ложно (False) - операторы2. Форма условного оператора определяется по наличию в строке, начинающейся If условие Then, текста после Then, отличного от комментария. Если такой текст есть, считается, что использована форма в одну строку, нет - оператор должен иметь форму блока. В этом случае подблоки вида:
[ElseIf условие-n Then
[операторы-n]
могут отсутствовать либо повторяться несколько раз; подблок:
[Else
[ИначеОператоры]]
также необязателен, а закрывающий оператор End If необходим. По крайней мере одна из последовательностей операторы, операторы-n … или ИначеОператоры должна быть непустой. Если условие истинно, выполняются операторы, нет - отыскивается первое истинное условие-n, и выполняются операторы-n. Если все эти условия ложны, выполняются ИначеОператоры. После выполнения одной (возможно, пустой) последовательности операторов управление передается оператору, следующему за End If.
Примеры:
Public Sub MinMax1(ByVal X As Integer, ByVal Y As Integer, _
Min As Integer, Max As Integer)
'Оператор If в одну строку
If X > Y Then Max = X: Min = Y Else Max = Y: Min = X
End Sub
Public Sub MinMax2(ByVal X As Integer, ByVal Y As Integer, _
Min As Integer, Max As Integer)
'Оператор If в виде блока
If X > Y Then
Max = X
Min = Y
Else
Max = Y
Min = X
End If
End Sub
Public Sub If1()
Dim Max As Integer, Min As Integer
Call MinMax1(2 + 3, 2 * 3, Min, Max)
Debug.Print Max, Min
Call MinMax2(2 + 3, 2 * 3, Min, Max)
Debug.Print Max, Min
End Sub
Пример 7.2. (html, txt)
По-видимому, можно было бы классифицировать программистов в зависимости от того, какая из форм записи процедуры MinMax кажется им предпочтительнее при записи и при чтении. Приведем еще один пример, где идет работа с объектами. Вначале добавим еще один класс объектов:
'Класс Man
'Свойства
Public Age As Byte
Public Name As String
'Другие свойства и методы пока не определены
А теперь приведем процедуру, в которой будем работать с объектами класса Child и Man. Заметьте, в условии оператора IF проверяется тип объекта:
Public Sub BoyOrMan()
Dim Boy As New Child
Dim Person As New Man
Dim SomeBody As Object
Dim Answer As Integer
Boy.Age = 10: Boy.Name = "Александр"
Person.Age = 21: Person.Name = "Александр"
Answer = InputBox("Введите число от 10 до 20", "Возраст", 15)
If Answer > 15 Then
Set SomeBody = Person
Else: Set SomeBody = Boy
End If
If TypeOf SomeBody Is Child Then
Debug.Print "Это мальчик!"
ElseIf TypeOf SomeBody Is Man Then
Debug.Print "Это Мужчина"
Else
Debug.Print "Не знаю, кто это"
End If
End Sub
Пример 7.3. (html, txt)
Результат ее работы зависит от того, какой возраст Вы введете в окне ввода.