- •Типы данных vba
- •Переменные vba
- •Имя переменной
- •Создание переменной
- •Типизированные переменные
- •Область действия переменных
- •Константы vba
- •Константы Boolean
- •Именованные константы
- •Задание типа константы
- •Внутренние константы
- •Совместимость типов данных vba
- •Преобразования численных типов
- •Преобразование строк и чисел
- •Преобразования Boolean
- •Преобразование Date
- •Арифметические операторы vba
- •Оператор вычитания (-)
- •Оператор умножения (*)
- •Оператор деления (/)
- •Деление по модулю (Mod)
- •Логические операторы vba
- •Логический оператор and
- •Логический оператор or
- •Логический оператор not
- •Логический оператор xor
- •Логический оператор eqv
- •Операторы сравнения
- •Приоритеты выполнения операций
- •Функции vba. Понятие функции.
- •Игнорирование результата функции
- •Именованные аргументы функции
- •Функция InputBox
- •Функции vba
- •Математические функции
- •Операторы ветвления vba
- •Циклы vba
- •Цикл For..Next
- •Цикл For Each..Next
- •Цикл Do .. While
- •Цикл Do .. Until
- •Цикл Do .. Loop While
- •Цикл Do .. Loop Until
- •Массивы vba
- •Объявление массивов
- •Использование массивов
- •Изменение размерности динамического массива
Функция InputBox
InputBox - еще одна довольно часто используемая функция для обмена данными с пользователем.
Полный синтаксис функции InputBox следующий:
InputBox (Prompt [, Title] [, Default] [, XPos] [, YPos] [, HelpFile, Context])
Аргументы Prompt (единственный обязательный аргумент), Title, HelpFile, Context - аналогичны уже рассмотренным одноименным аргументам функции MsgBox.
Аргумент Default - строковое выражение, использующееся как значение по умолчанию для пользовательского ввода.
Аргументы XPos, YPos - любые численные выражения. Эти аргументы задают координаты вывода диалогового окна на экране монитора. XPos - горизонтальное расстояние от левого края окна. YPos - вертикальное расстояние от верхнего края окна. Оба расстояния измеряются в твипах (1 твип = 1/20 точки = 0,0007 дюйма). Следует быть внимательным при использовании этих аргументов, т.к. при их больших значениях диалоговое окно может "уехать" за пределы экрана монитора.
В качестве примера использования функции InputBox приведен нижеследующий листинг, который запрашивает пользователя ввести имя файла, и предлагает имя по умолчанию.
При вызове InputBox можно использовать именованные аргументы.
Нельзя смешивать именованные аргументы с обычным списком аргументов в одном и том же вызове функции
Функции vba
Ниже представлены таблицы с кратким описанием наиболее часто используемых функций VBA.
Математические функции
N - означает любое численное выражение. Все аргументы функций являются обязательными, если не указано иначе.
Функция(аргумент) |
Действие |
Abs(N) |
Возвращает абсолютное значение аргумента N |
Atn(N) |
Возвращает арктангенс N (радиан) |
Cos(N) |
Возвращает косинус N (радиан) |
Exp(N) |
Возвращает константу е (натуральный логарифм = 2.718282...), возведенную в степень N |
Int(N) |
Возвращает целую часть N. Не округляет число, а отбрасывает любую дробную часть. Если N отрицательное число, то возвращается ближайшее отрицательное целое меньшее, чем или равное N |
Log(N) |
Возвращает натуральный логарифм N |
Rnd(N) |
Возвращает случайное число: аргумент является необязательным. |
Sgn(N) |
Возвращает знак числа: -1, если N - отрицательное; 1, если N - положительное; 0, если N равно 0 |
Sin(N) |
Возвращает синус N (радиан) |
Sqr(N) |
Возвращает корень квадратный из N. Если N является отрицательным числом - возвращается ошибка времени исполнения |
Tan(N) |
Возвращает тангенс N (радиан) |
Операторы ветвления vba
До сих пор рассматривались процедуры и функции, которые VBA выполняет в линейном порядке - VBA начинает выполнение кода с первого оператора после строки объявления процедуры (функции) и продолжает выполнять каждый оператор построчно до тех пор, пока не будет достигнут оператор End Sub (End Function). Такой линейный алгоритм можно представить нижеследующей блок-схемой:
Однако довольно часто встречаются ситуации, когда необходимо, чтобы процедуры или функции выполняли различные действия при разных условиях. Такую ситуацию иллюстрируют следующие блок-схемы:
Операторы, выполняющие роль ветвления программы на основании какого-либо условия, называются операторами условного перехода.
Простейшими операторами условного перехода являются операторы If..Then; If..Then..Else. Первый оператор позволяет выбирать единственную ветвь процедуры (левая блок-схема), тогда как второй дает возможность выбирать из двух альтернативных ветвей кода процедуры (правая блок-схема) на основе оценки того, является ли условие равным True или False.
СИНТАКСИС IF..THEN
Вариант 1:
If Condition Then Statements
Вариант 2:
If Condition Then
Statements
End If
Condition - логическое выражение;
Statements - один, несколько или ни одного оператора VBA.
Первый вариант требует написания оператора в одну строку, при этом в секции Statements можно указывать несколько операторов, разделяя их двоеточием.
Второй вариант позволяет указывать несколько операторов в разных строках.
Логика работы следующая: VBA сначала оценивает логическое выражение, представленное в секции Condition; если это логическое выражение равно True то выполняется оператор (операторы) секции Statements; затем VBA продолжает выполнение кода следующего за строкой If..Then (Вариант 1) или за ключевыми словами End If (Вариант 2). Если же логическое выражение равно False, то операторы секции Statements пропускаются и выполняется код, следующий за этой секцией.
Ниже приведен листинг элементарного использования первого варианта написания If..Then:
А теперь - второй вариант:
Обратите внимание, что операторы секции Statements написаны с использованием отступа (используется табуляция). Это важный момент. Следует сразу приучать себя к подобному оформлению программного кода - это повышает его удобочитаемость и значительно облегчает поиск ошибок.
Синтаксис If..Then..Else
Вариант 1:
If Condition Then Statements Else ElseStatements
Вариант 2:
If Condition Then
Statements
Else ElseStatements
End If
Condition - логическое выражение;
Statements, ElseStatements - один, несколько или ни одного оператора VBA.
По аналогии с If..Then - первый вариант требует написания оператора в одну строку, при этом в секциях Statements и ElseStatements можно указывать несколько операторов, разделяя их двоеточием.
Второй вариант позволяет указывать несколько операторов в разных строках.
Логика работы следующая: VBA сначала оценивает логическое выражение, представленное в секции Condition; если это логическое выражение равно True то выполняется оператор (операторы) секции Statements; затем VBA продолжает выполнение кода следующего за строкой If..Then (Вариант 1) или за ключевыми словами End If (Вариант 2). Если же логическое выражение равно False, то выполняются операторы секции ElseStatements.
Следует сказать, что блок операторов If..Then..Else (Вариант 2) легче читать и понимать. Поэтому, советую использовать именно этот вариант, даже если в секциях Statements и ElseStatements будет находиться по одному оператору.
Если требуется реализовать более сложное ветвление используется следующая запись оператора выбора If..Then..ElseIf..End If:
СИНТАКСИС:
If Condition Then
Statements
ElseIf Condition1 Then
Statements1
…………………………
………………………….
ElseIf ConditionN Then
StatementsN
Else
ElseStatements
End If
Логика работы следующая: VBA сначала оценивает логическое выражение, представленное в секции Condition; если это логическое выражение равно True то выполняется оператор (операторы) секции Statements; затем VBA продолжает выполнение кода следующего ключевым словом End If. Если же логическое выражение равно False, то выполняются проверка условия Condition1; если это логическое выражение равно True то выполняется оператор (операторы) секции Statements1; затем VBA продолжает выполнение кода следующего ключевым словом End If. В противном случае проверяется условие Condition2 и т.д. пока не будет выполнена проверка условия ConditionN; если это логическое выражение равно True то выполняется оператор (операторы) секции StatementsN; затем VBA продолжает выполнение кода следующего ключевым словом End If. Если же логическое выражение равно False, то выполняются операторы секции ElseStatements.
Sub sample3()
Dim value As Long
Const MSG = "Вы ввели число, "
value = InputBox(prompt:="Введите число", Title:="Пример 4")
If value = 0 Then
MsgBox (MSG & "равное 0")
ElseIf value > 0 Then
MsgBox (MSG & "большее 0")
Else
MsgBox (MSG & "меньшее 0")
End If
End Sub
