- •Лекция Операторы ветвления и повторения на языке vba Использование MsgBox для обеспечения возможности выбора
- •Циклы vba (ч.1). Команды организации циклов
- •Циклы с неизвестным числом повторений (тестирующие условия до и после выполнения тела цикла)
- •Цикл Do .. While
- •Цикл Do .. Until
- •Цикл Do .. Loop While
- •Цикл Do .. Loop Until
- •Вложенные циклы
- •Прерывание выполнения макроса или процедуры
Лекция Операторы ветвления и повторения на языке vba Использование MsgBox для обеспечения возможности выбора
Как уже отмечалось ранее, при помощи необязательного аргумента Buttons можно использовать VBA-процедуру MsgBox как функцию для получения выбора от пользователя в ответ на сообщения или вопросы, которые отображает процедура. Для многих простых вариантов выбора использование функции MsgBox для получения ответа от пользователя является гораздо более легким, чем получение текстового ввода с помощью функции InputBox и последующий анализ этого текста для определения того, какой выбор сделал пользователь.
При включении аргумента Buttons с необходимыми круглыми скобками оператор MsgBox работает подобно функции и отображает окно сообщения, содержащее различные командные кнопки. MsgBox возвращает численный результат, указывающий, какую командную кнопку выбрал пользователь. Число и тип командных кнопок, отображаемых диалоговым окном MsgBox, выдается с помощью аргумента Buttons.
Аргумент Buttons позволяет задавать количество и тип кнопок и наличие или отсутствие в окне сообщения одного из значков Windows. Можно также использовать аргумент Buttons для определения того, какая из отображаемых кнопок является кнопкой по умолчанию в окне сообщения. Каждый раз можно задавать только один тип кнопки, один значок и одну кнопку по умолчанию.
Как только пользователь выбирает командную кнопку в окне сообщения, VBA возвращает численное значение, соответствующее выбору пользователя. Результат функции присваивается переменной Vibor (в вышеприведенном листинге). VBA использует различные значения в зависимости от того, какую командную кнопку выбрал пользователь. Поскольку каждая кнопка имеет свое определенное возвращаемое значение, VBA предоставляет несколько внутренних констант для представления возможных возвращаемых значений функции MsgBox. Полный список значений констант VBA, которые может возвращать MsgBox, приведен на странице "Функции VBA (ч.1). Понятие функции".
Циклы vba (ч.1). Команды организации циклов
Какие либо действия процедуры повторяющиеся заданное количество раз или пока выполняется или не выполняется некоторое условие называют циклом.
Процесс выполнения все операторов, заключенных в структуру цикла, один раз называется итерацией цикла.
Структуры цикла, всегда выполняющиеся заданное количество раз, называются циклами с фиксированным числом итераций. Другие типы структур цикла повторяются переменное количество раз в зависимости от некоторого набора условий. Такие циклы называются неопределенными циклами.
Блок операторов, находящийся между началом и концом цикла называется "тело цикла".
Самой простой структурой цикла является фиксированный цикл.
Цикл For..Next
Синтаксис
For counter = Start To End [Step StepSize]
Statements
Next [counter]
Counter - любая численная переменная VBA
Start - любое численное выражение , определяет начальное значение для переменной counter
End - численное выражение, определяет конечное значение для переменной counter
Statements - один, несколько или ни одного оператора VBA (тело цикла).
По умолчанию VBA увеличивает переменную counter на 1 каждый раз при выполнении операторов в цикле. Можно задать другое значение (SterSize - любое численное выражение), на которое будет изменяться counter.
Ключевое слово Next сообщает VBA о том, что достигнут конец цикла. Необязательная переменная counter после ключевого слова Next должна быть той же самой переменной counter, которая была задана после ключевого слова For в начале структуры цикла.
Ниже представлен листинг простейшего цикла For..Next, который считает сумму цифр от 1 до 10:
А теперь два варианта цикла For..Next с использованием шага цикла отличного от единицы:
Обратите внимание! При уменьшении счетчика цикла For..Next цикл выполняется, пока переменная счетчика больше или равна конечному значению, а когда счетчик цикла увеличивается, цикл выполняется, пока переменная счетчика меньше или равна конечному значению.
Цикл For Each..Next
Цикл For Each..Next не использует счетчик цикла. Циклы For Each..Next выполняются столько раз, сколько имеется элементов в определенной группе, такой как коллекция объектов или массив (которые будут рассматриваться позже). Проще говоря, цикл For Each..Next выполняется один раз для каждого элемента в группе.
Синтаксис
For Each Element In Group
Statements
Next [Element]
Element - переменная, используемая для итерации по всем элементам в определенной группе
Group - это объект коллекции или массив
Statements - один, несколько или ни одного оператора VBA (тело цикла).
Цикл For Each..Next всегда выполняется столько раз, сколько имеется элементов в определенной группе.
В нижеприведенном листинге показана функция SheetExists, использующая цикл For Each..Next для определения того, существует ли определенный лист в рабочей книге Excel:
