- •Н.Г.Куфтинова программирование в среде vba
- •Н.Г.Куфтинова программирование в среде vba
- •Оглавление
- •Введение
- •Разработка алгоритма. Блок-схема. Структуры алгоритмов
- •Понятие алгоритма. Структуры алгоритмов
- •3. Базовая структура цикл.
- •Контрольные вопросы
- •Представление данных в памяти,типы данных, идентификаторы, переменные, массивы
- •Программный способ записи алгоритмов
- •Представление данных в памяти
- •Типы данных
- •Идентификаторы, переменные, массивы
- •Операции, выражения, операторы
- •Контрольные вопросы
- •Структура программ на vba, операторы описания, присваивания
- •Структура программ на vba
- •Операторы описания
- •Oператоры присваивания
- •Контрольные вопросы
- •Понятие макроса, создание, отладка программы
- •Понятие макроса. Создание макроса
- •4.2. Отладка, использование среды для отладки программ
- •Средства отладки
- •Обработка ошибок выполнения
- •Перехват ошибок
- •4.6. Общие сведения о перехвате ошибок
- •Контрольные вопросы
- •Управляющие структуры vba
- •Конструкция If . . . Then
- •Конструкция If . . . Then . . . Else
- •Конструкция Select Case
- •Контрольные вопросы
- •Операторы цикла. Вложенные циклы
- •Операторы цикла
- •Вложенные циклы
- •Контрольные вопросы
- •Символьные данные. Операции и функции для работы с символьными данными
- •Символьные данные
- •Операции и функции для работы с символьным данными
- •Булевские вектора и операции для работы с ними
- •Контрольные вопросы
- •Подпрограмма-процедура
- •Общие процедуры
- •Создание новых процедур
- •Просмотр существующих процедур
- •9.4. Вызов процедур Sub
- •Процедуры в стандартных модулях
- •Подпрограмма-функция
- •10.1 Вызов процедур Function
- •10.2. Механизмы передачи параметров. Типы данных параметров. Передача параметров по значению
- •10.3. Передача параметров по ссылке
- •10.4. Неизвестное число параметров
- •10.5. Рекурсия
- •Контрольные вопросы
- •Использование объектов, их свойства и методы. Формы
- •Работа с объектами
- •Происхождение объектов. Основы работы с объектами
- •Установка значений свойств
- •Получение значений свойств
- •Использование методов в коде
- •Взаимосвязь объектов
- •Применение свойств и методов к членам наборов
- •Общие наборы в vba
- •Разработка формы. События и методы формы
- •Связь между объектами. Создание объектов. Использование и объявление переменных для объектов
- •Формы как объекты. Объект fso
- •Контрольные вопросы
- •12. Элементы управления в приложениях vba
- •12.1. Кнопки управления
- •12.2. Метки
- •12.3. Текстовые поля
- •12.4. Работа с текстом в текстовом поле
- •12.5. Флажки
- •12.6. Создание групп переключателей. Выбор переключателей
- •12.7. Комбинированные окна и списки
- •12.8. Полосы прокрутки как устройства ввода
- •12.9. Графическое окно в качестве контейнера
- •12.10. Элемент управления Image
- •12.11. Другие элементы управления
- •Контрольные вопросы
- •Литература
- •Приложение 1
- •2. Математические функции
- •4. Операторы циклов
- •Часть1. Обработка одномерного массива
- •Часть 2. Обработка двумерного массива
- •Приложение 2
Контрольные вопросы
Опишите и охарактеризуйте основные управляющие структуры VBA?
Опишите конструкцию If . . . Then?
Опишите конструкцию If . . . Then . . . Else?
Опишите конструкцию Select Case?
Операторы цикла. Вложенные циклы
Операторы цикла
Циклы позволяют выполнить одну или несколько строк кода несколько раз. VBA поддерживает следующие циклы:
For...Next
For Each...Next
Do... Loop
Конструкция For . . . Next. Когда число повторений известно заранее, используют цикл For . . . Next. В цикле For используется переменная, называемая переменной цикла или счетчиком цикла, которая увеличивается или уменьшается на заданную величину при каждом повторении цикла. Синтаксис этой конструкции следующий:
For counter = start To end [Step increment]
операторы
Next [counter]
Параметры counter (счетчик), start (начало цикла), end (конец цикла) и increment (приращение) являются числовыми.
Параметр increment может быть как положительным, так и отрицательным. Если он положителен, параметр start должен быть меньше или равен параметру end, иначе цикл не будет выполняться. Если параметр increment отрицателен, то параметр start должен быть больше или равен значению параметра end, чтобы выполнялось тело цикла. Если параметр Step не задан, то значение параметра increment по умолчанию равно 1.
VBA выполняет цикл For в следующей последовательности:
1. Устанавливает значение переменной цикла counter в значение start.
2. Сравнивает значение переменной цикла counter и значение параметра end. Если переменная counter больше, VBA завершает выполнение цикла. (Если значение параметра increment отрицательно, то VBA прекращает выполнение цикла при условии, что значение переменной цикла counter меньше значения параметра end.)
3. Выполняет операторы тела цикла statements.
4. Увеличивает значение переменной цикла counter на 1 или на величину значения параметра increment, если он задан.
5. Повторяет шаги со 2 по 4.
Рассмотрим пример: Вычислить значение функции f(t)
при заданных a, b, n, если t изменяется от a до b с шагом Dt=(b-a)/(n-1).
Sub пример3()
Dim f() As Single
Dim a As Single, b As Single, t As Single, dt As Single
Dim i As Integer, n As Integer
Call read("a1", a) : Call read("b1", b) : Call read("c1", n)
ReDim f(1 To n - 1)
dt = (b - a) / (n - 1) : t = a
Call out("a2", "i") : Call out("b2", "t") : Call out("c2", "f(t)")
For i = 1 To n - 1
t = t + dt
If t <= -1 Then
f(i) = -1
ElseIf t > 1 Then
f(i) = 1
Else
f(i) = t
End If
Call out("a" & (2 + i), i) : Call out("b" & (2 + i), t) : Call out("c" & (2 + i), f(i))
Next i
End Sub
Конструкция For Each . . . Next
Цикл For Each . . . Next похож на цикл For . . . Next, но он повторяет группу операторов для каждого элемента из набора объектов или из массива, вместо повторения операторов заданное число раз. Он особенно полезен, когда неизвестно, сколько элементов содержится в наборе.
Синтаксис конструкции цикла For Each . . . Next таков:
For Each element In group
операторы
Next element
Следует помнить следующие ограничения при использовании цикла For Each . . . Next:
Для наборов параметр element может быть только переменной типа variant, общей переменной типа object или объектом, перечисленным в Object Browser
Для массивов параметр element может быть только переменной типа Variant
Нельзя использовать цикл For Each . . . Next с массивом, имеющим определенный пользователем тип, так как переменная типа variant не может содержать значение определенного пользователем типа
Конструкция Do...Loop
Цикл Do применяется для выполнения блока операторов неограниченное число раз. Существует несколько разновидностей конструкции Do . . . Loop, но каждая из них вычисляет выражение-условие, чтобы определить момент выхода из цикла. Как и в случае конструкции If . . . Then условие должно быть величиной или выражением, принимающими значение False (нуль) или True (не нуль).
В следующей конструкции Do . . . Loop операторы выполняются до тех пор, пока значением условия является True (Истина):
Do While условие
операторы
Loop
Выполняя этот цикл, VBA сначала проверяет условие. Если условие ложно (False), он пропускает все операторы цикла. Если оно истинно (True), VBA выполняет операторы цикла, снова возвращается к оператору Do While и снова проверяет условие.
Следовательно, цикл, представленный данной конструкцией, может выполняться любое число раз, пока значением условия является не нуль или True (Истина). Отметим, что операторы тела цикла не выполняются ни разу, если при первой проверке условия оно оказывается ложным (False).
Рассмотрим пример: Вычислить сумму ряда
с заданной точностью.
Sub пример4()
Dim e As Single, x As Single, s As Single
Dim m As Single, p As Single, i As Single
Call read("a1", x) : Call read("b1", e)
s = 0: i = 1: m = 1: p = -1
Call out("a2", "i") : Call out("b2", "m") : Call out("c2", "s")
Do While Abs(m) >= e
p = -p * x
m = p / i
s = s + m
Call out("a" & (2 + i), i) : Call out("b" & (2 + i), Abs(m)) : Call out("c" & (2 + i), s)
i = i + 1
Loop
End Sub
Другая разновидность конструкции Do . . . Loop сначала выполняет операторы тела цикла, а затем проверяет условие после каждого выполнения. Эта разновидность гарантирует, что операторы тела цикла выполнятся по крайней мере один раз:
Do
операторы
Loop
While условие
Две другие разновидности конструкции цикла аналогичны предыдущим, за исключением того, что цикл выполняется, пока условие ложно (False):
Цикл не выполняется вообще или выполняется много раз:
Do Until условие
операторы Loop
Цикл выполняется по крайней мере один раз:
Do
операторы
Loop Until условие
Пример 1. С помощью оператора For…Next расчитать суммы чисел (рис. 27.).
Рис. 27. Результат программы примера 1.
Пример 2. С помощью структуры цикла For..Next и с использованием шага цикла отличного от единицы рассчитать сумму чисел (рис. 28.).