
- •Использование visual basic for applications для разработки приложений в ms office
- •Введение
- •1. Общие принципы ооп
- •2. Визуальное программирование. Событийно-управляемое программирование
- •3. Структура программы и иерархия классов в office
- •4. Интегрированная среда разработки vba
- •4.1. Окна интегрированной среды
- •4.2. Меню
- •4.2.1. Меню Файл
- •4.2.2. Меню Вид
- •4.2.3. Меню Вставка
- •4.2.4. Меню Формат
- •4.2.5. Меню Отладка
- •4.2.6. Меню Запуск (Run)
- •4.2.7. Меню Сервис (Tools)
- •4.2.8. Пример создания простейшей формы
- •5. Язык vba, написание программного кода
- •5.1. Общие элементы синтаксиса, операторы
- •5.1.2. Арифметические операторы
- •5.1.3. Оператор конкатенации &
- •5.1.4. Логические операторы
- •5.1.5. Комментарий
- •5.2. Функции, процедуры, макросы, обработчики событий
- •5.2.1. Процедуры
- •5.2.2. Функции
- •5.2.3. Функции MsgBox и DialogBox
- •InputBox (подсказка [, заглавие ] [, по_умолчанию ] [, х_поз][ , у_поз][ , help_file, контекст]).
- •5.2.4. Еще один способ вызова процедуры или функции
- •5.3. Объявление переменных, типы переменных
- •5.4. Преобразованиеданных и типов данных
- •5.5. Массивы
- •5.6. Константы
- •5.7. Область видимости и время жизни переменных, констант и процедур
- •5.7.1. Управление областью видимости
- •5.7.2. Пример создания программного кода формы
- •5.8. Инструкции vba
- •5.8.1. Инструкции присваивания Let и Set
- •5.8.2. Инструкции циклов
- •5.8.3. Инструкции принятия решений
- •6. Создание графического интерфейса с помощью стандартных элементов диалога
- •6.1. Создание формы и размещение в ней элементов управления
- •6.1.1. Объектная модель библиотеки ms Forms
- •6.1.2. События форм и элементов управления
- •6.2. Элементы управления
- •6.2.1.Label (Надпись)
- •6.2.2.TextBox (Поле)
- •6.2.3.RadioButton (Переключатели или радиокнопки)
- •6.2.4.CheckBox (Флажок) и Toggle Button (Выключатель)
- •6.2.5.Frame (Рамка)
- •6.2.6.ListBox (Список)
- •6.2.7.ComboBox (Поле со списком)
- •6.2.14.Свойства элементов управления
- •7. Создание приложений для ms excel
- •7.1. Структура проекта
- •7.2. ОбъектApplication
- •7.3. Работа с книгами
- •7.4. Работа с рабочими листами
- •7.5. Работа с ячейками
- •8. Создание приложений для ms word
- •8.1. Структура проекта
- •8.2. ОбъектApplication
- •8.3. Работа с документами
- •8.4. Работа с абзацами
- •8.5. Работа с текстом
- •8.5.1. Объект Range
- •8.5.2. Объект Selection
- •9. Задания для самостоятельной работы
- •9.1. Создание графического интерфейса
- •9.2. Написание программного кода
- •9.3. Создание приложения дляWord
- •9.4. Написание функции и процедуры
- •9.5. Создание приложения дляExcel
- •Библиографический список
5.8.2. Инструкции циклов
5.8.2.1. For...Next
Управляющий оператор For...Next предназначен для циклического выполнения некоторой последовательности действий заданное число раз. Его общий синтаксис представлен ниже.
For счетчик = начальное_значение To конечное_значение [Step шаг] Тело цикла
Next [счетчик]
Здесь счетчик – это переменная, называемая переменной цикла. Ее начальное значение (при первой инициализации цикла) равно значению, указанному в переменной (или константе). После каждого прохождения цикла ее значение увеличивается на величину шага; если шаг не задан, то она увеличивается на единицу. Признаком конца цикла служит слово Next, после которого может стоять имя переменной-счетчика, а может и не стоять – на работоспособности программы это не отразится. Кстати, в отличие от некоторых других языков программирования, как счетчик, так и шаг цикла могут быть не только целыми, но и вещественными числами. В тело цикла можно включить оператор Exit For, при его выполнении происходит безусловный выход из цикла, и программа выполняет действие, следующее за оператором Next.
Инструкцию For...Next можно, например, использовать для присвоения значений элементам массива.
Option Base 1
Sub Example()
Dim massif(100) As Single
Dim i As Integer
For i = 2 To 100
massif(i) = massif(i - 1) + 1.45
Next
End Sub
В этом примере каждому последующему элементу массива присваивается значение на 1,45 большее, чем значение предыдущего. Нумерация элементов массива начинается с единицы, по умолчанию при инициализации все элементы массива равны нулю.
5.8.2.2. Do...Loop
Оператор Do...Loop предназначен для организации циклов с заранее неизвестным числом повторений. Его синтаксис таков:
Do [While логическое_выражение]
Тело цикла
Loop
Или второй вариант синтаксиса этого оператора:
Do
Тело цикла
Loop While логическое_выражение
Логическое выражение может быть логической переменной, константой (False или True) или даже целым выражением, возвращающим логическое значение. Цикл выполняется до тех пор, пока это логическое выражение имеет значение True, т. е. истина. Отличие этих двух форм цикла в том, что в первом случае условие проверяется перед прохождением цикла, а во втором случае – после. Таким образом, во втором случае цикл будет пройден хотя бы один раз. Разновидностью этого цикла является цикл, содержащий в себе ключевое слово Until вместо While. Такой цикл выполняется до тех пор, пока логическое выражение после Until не станет равным True, т. е. пока оно имеет значение False — ложь.
Оператор Exit Do, так же как и в случае с циклом For … Next, позволяет досрочно выйти из цикла. Как всегда, выражение в квадратных скобках можно опустить, очевидно, в таком случае, если нигде не встречается оператор Exit Do, цикл будет повторяться бесконечное число раз.
5.8.2.3. While...Wend
Инструкция While...Wend очень похожа на предыдущую и выполняет те же функции, но менее гибка, чем она. Синтаксис инструкции имеет следующий вид.
While логическое_выражение
Тело цикла
Wend
While…Wend действует точно так же, как и Do While…Loop, т. е. повторяется, пока логическое выражение истинно, а проверка условия происходит в начале цикла. Приведем пример еще нескольких возможных реализаций процедуры присвоения значений элементам массива при помощи описанных выше инструкций.
Sub Example2()
Dim massif(100) As Single
Dim i As Integer
i = 2
Do
massif(i) = massif(i - 1) + 1.45
i = i + 1
Loop While i <= 100
End Sub
Sub Example3()
Dim massif(100) As Single
Dim i As Integer
i = 2
Do
massif(i) = massif(i - 1) + 1.45
i = i + 1
Loop Until i > 100
End Sub
Sub Example4()
Dim massif(100) As Single
Dim i As Integer
i = 2
While i <= 100
massif(i) = massif(i - 1) + 1.45
i = i + 1
Wend
End Sub
Как видим, если раньше счетчик цикла увеличивался на единицу автоматически, то сейчас нам приходится делать это в теле цикла. Кроме того, в зависимости от того, какое ключевое слово, While или Until, было нами использовано, изменяется и условие окончания (для Until) или продолжения (для while) цикла.
5.8.2.4. For Each...Next
Это еще одна инструкция цикла, которую можно перевести с английского языка примерно как «Для каждого … что-то сделать». Прежде, чем говорить о ней, нужно ввести понятие коллекции, широко использующееся в VBA. Коллекции объектов – это некий улучшенный аналог массивов переменных. Каждая коллекция представляет собой объект, который является контейнером для множества (семейства) других объектов одного и того же типа. Например, объект Worksheets (рабочие листы) содержит в себе все объекты Worksheet (рабочий лист), содержащиеся в данной книге. Коллекция позволяет определить элемент семейства по индексу (по номеру) или по имени. Некоторые коллекции допускают добавление или удаление элементов, другие не допускают.
Инструкция For Each...Next позволяет выполнить одну и ту же последовательность действий для всех объектов коллекции или для всех элементов массива. Эта инструкция удобна, когда точно неизвестно число составляющих коллекции или массива. Она имеет вид:
For Each элемент In массив_или_коллекция
Тело цикла
Next [элемент]
Для коллекции элемент может быть либо типа Variant, либо класса элементов, составляющих коллекцию, для массива же только типа Variant.
Следующий пример закрывает все рабочие книги.
Sub ForEachExample ( )
Dim Book As Object
For Each Book In Workbooks
Book. Close
Next Book
End Sub
А в этом примере все элементы массива заполняются единицами.
Sub ForEachExample2()
Dim Counter
Dim Massif As Integer
For Each Counter In Massif
Counter = 1
Next
End Sub