- •Оглавление
- •Введение
- •1. Объекты ms Excel
- •1.1. Объекты, их свойства и методы
- •1.1.1. Свойства: присвоение и использование значений
- •1.1.1.1. Присвоение значений
- •1.1.1.2. Использование значений
- •1.1.2. Примеры использования методов рабочей книги Excel
- •1.1.2.1. Вызов метода
- •1.1.2.2. Передача аргумента в метод
- •1.2. Ссылки на одиночные объекты и объекты из семейств
- •1.2.1. Различия между одиночными объектами и объектами из семейств
- •1.2.2. Семейства как объекты
- •1.2.3. Ссылка на объект
- •1.3. Иерархия объектов ms Excel
- •1.3.1. Иерархическая структура
- •1.3.2. Доступ к объектам через свойства и методы
- •1.4. Объект Application
- •1.4.1. Свойства объекта Application
- •1.4.2. Методы объекта Application
- •1.5. Объект Workbook и семейство Workbooks
- •1.5.1. Свойства объекта Workbook и семейства Workbooks
- •1.5.2. Методы объекта Workbook и семейства Workbooks
- •1.5.3. Функции, используемые для работы с файлами и папками
- •1.5.4. Функция MsgBox
- •1.5.5. Функция InputBox
- •1.6. Объект Worksheet
- •1.6.1. Свойства объекта Worksheet и семейства Worksheets
- •1.6.2. Методы объекта Worksheet и семейства Worksheets
- •1.7. Объект Range
- •1.7.1. Свойства объекта Range
- •1.7.2. Методы объекта Range
- •2. Использование переменных в vba
- •2.1. Допустимые имена
- •2.2. Типы данных переменных vba
- •2.3. Описание переменной
- •2.4. Использование переменных
- •2.5. Преимущества переменных
- •2.6. Объектные переменные
- •2.6.1. Задание объектной переменной
- •2.6.2. Объектные переменные общего типа
- •2.6.3. Объектные переменные конкретных типов
- •2.6.4. Преимущества объектных переменных
- •2.7. Неявное описание переменных и тип Variant
- •2.8. Обязательное описание переменных
- •2.9. Типы данных по умолчанию
- •2.10. Пользовательские типы данных
- •3. Массивы vba
- •3.1. Размерность массива
- •3.2. Объявление массива
- •3.3. Использование массива
- •3.4. Номер первого элемента и границы массива
- •3.5. Динамические массивы
- •3.6. Сохранение данных в динамическом массиве при изменении последней размерности
- •3.7. Пять функций для работы с массивами
- •4. Константы
- •5. Вызов одной программы из другой
- •5.1. Фрагментирование кода
- •5.2. Передача данных при вызове программы
- •6. Использование функций в vba
- •7. Область видимости переменных, констант, подпрограмм и функций
- •7.1. Область видимости переменных
- •7.1.1. Переменные уровня процедуры
- •7.1.2. Переменные уровня модуля
- •7.1.3. Переменные уровня проекта
- •7.1.4. Сохраняемые переменные
- •7.1.5. Область видимости подпрограмм и функций
- •7.1.6. Сохраняемые подпрограммы и функции
- •8. Управляющие структуры
- •8.1. Управляющая инструкция If-Then-Else
- •8.2. Управляющая инструкция Select Case
- •8.3. Управляющая инструкция For-Next
- •8.4. Управляющая инструкция For-Each-Next
- •8.4.1. Инструкция For-Each-Next с многомерными массивами
- •8.4.2. Инструкция For-Each-Next с семействами
- •8.5. Управляющая инструкция While-Wend
- •8.6. Управляющая инструкция Do-Loop
- •9. Инструкция With
- •10. Встроенные функции vba
- •10.1. Математические функции
- •10.2. Функции проверки типов
- •10.3. Функции преобразования форматов
- •10.4. Функции обработки строк
- •10.5. Функции времени и даты
- •11. Обработка ошибок
- •11.1. Предотвращение ошибок программными средствами
- •11.2. Обработка ошибок, инструкция On Error
- •12. Разработка пользовательского интерфейса
- •12.1. Форма (UserForm)
- •12.1.1. Вставка формы
- •12.1.2. Основные свойства и методы формы
- •12.1.3. События формы
- •12.2. Элементы управления формы vba
- •12.2.1. Некоторые общие свойства элементов управления
- •12.2.2. Соглашения об именах
- •12.2.3. Некоторые общие методы элементов управления
- •12.2.4. Общие события элементов управления
- •12.3. Кнопка (СоmmandButton)
- •12.4. Поле (TextBox)
- •12.5. Надпись (Label)
- •Начальные условия
- •Выполнение задания:
- •12.6. Список (ListBox)
- •12.6.1. Основные свойства элемента управления ListBox
- •12.6.2. Методы ListBox
- •12.6.3. Заполнение списка
- •12.6.4. Пример создания списка
- •12.6.5. Определение выбранных элементов списка
- •12.7. Поле со списком (ComboBox)
- •12.8. Флажок (CheckBox)
- •12.9. Выключатель (ToggleButton)
- •12.10. Переключатель (OptionButton)
- •12.11. Полоса прокрутки (ScrollBar) и счетчик (SpinButton)
- •12.12. Создание нестандартных меню и панелей инструментов
- •12.12.1. Объект CommandBar и семейство CommandBars
- •12.12.2. Методы объекта CommandBar
- •12.12.3. Свойства объекта CommandBar
- •12.12.4. Семейство CommandBarControls и объект CommandBarControl
- •12.12.5. Пример создания/удаления панели инструментов
- •12.12.5.1.Создание панели инструментов
- •12.12.5.2. Удаление панели инструментов
- •12.12.6. Пример создания/удаления меню
- •12.12.6.1. Создание меню
- •12.12.6.2. Удаление меню
- •13. Обработка событий объектов Workbook и Worksheet
- •13.1. События объекта Workbook
- •13.1.1. Событие Open
- •13.1.2. Событие BeforeClose
- •13.1.3. Событие SheetActivate
- •13.2. События объекта Worksheet
- •13.2.1. Событие Activate
- •13.2.2. Событие Deactivate
- •13.2.3. Событие SelectionChange
- •Библиография
8.3. Управляющая инструкция For-Next
Она позволяет выполнять несколько команд заданное число раз. Рассмотрим следующий пример: в нем число, записанное в переменную Base, возводится в степень, содержащуюся в переменной Power.
Sub ForNext()
Dim Base As Integer
Dim Power As Integer
Dim Result As Integer
Dim Count1 As Integer
Base = 4
Power = 5
Result =1
For Count = 1 To Power Step 1
Result = Result * Base
Next
MsgBox Base & " в степени " & Power & " = " _
& Result
End Sub
В этой программе с помощью цикла For-Next 4 возводится в пятую степень. Надо отметить, что в VBA есть оператор возведения в степень ^, поэтому для подобного расчета достаточно написать
Num2 = 4 ^ 5
Мы решили использовать цикл For-Next для возведения в степень исключительно в учебных целях. В программе ForNext для вычислений используются четыре целые временные: Base, равная 4, Power, равная 5, Result, предназначенная для хранения результата, и Countl – счетчик цикла. Рассмотрим отдельные элементы инструкции For-Next.
Элемент |
Описание |
For |
Ключевое слово, отмечающее начало инструкции For-Next |
Count = 1 То Power |
Выражение, определяющее счетчик и его начальное и конечное значения, задающие число повторений цикла. В данном случае в качестве счетчика используется переменная Count. Ключевое слово То разделяет начальное (1) и конечное (Power) значения счетчика. При первом обращении к циклу переменной Count присваивается значение 1, и начинается выполнение цикла |
Step 1 |
Ключевое слово, задающее шаг приращения счетчика при завершении очередного цикла. Чаще всего в циклах For-Next он равен 1, но может быть любым целым числом, в том числе и отрицательным (тогда значение счетчика в каждом цикле уменьшается). В начале очередного цикла значение счетчика сравнивается с его конечным значением. Если разница положительная (значение счетчика превосходит его конечное значение), управление передается инструкции, заданной после ключевого слова Next. To же самое происходит и при отрицательной разнице. Указание ключевого слова Step и величины шага не является обязательным. Если они не определены, VBA выполняет цикл с шагом 1 |
Result = Result * Base |
Тело цикла. Может состоять из нескольких инструкций |
Next |
Ключевое слово, отмечающее конец инструкции For-Next. При достижении ключевого слова Next значение счетчика увеличивается на величину шага, после чего управление передается на начало цикла. Затем происходит сравнение счетчика с конечным значением, и цикл при необходимости повторяется снова |
8.4. Управляющая инструкция For-Each-Next
Сейчас мы расскажем о, вероятно, самом мощном цикле VBA – For-Each-Next. Аналогичные структуры в других языках программирования встречаются очень редко. Инструкция For-Each-Next предназначена для выполнения одной и той же группы действий над каждым объектом семейства или элементом массива. Ниже приведен, простой пример этой инструкции:
Option Base 1
Sub ForEachNext()
Dim Студенты(5) As String
Dim Студент As Variant
Студенты(1) = "Абрикосов"
Студенты(2) = "Богданов"
Студенты(3) = "Кузнецова"
Студенты(4) = "Милютин"
Студенты(5) ="Романова"
For Each Студент In Студенты
MsgBox Студент
Next
End Sub
В ForEachNext элементы массива Студенты заполняются фамилиями студентов, которые затем по очереди выводятся на экран в структуре For-Each-Next:
Обратите внимание, что, как и в случае For-Next, инструкции цикла выполняются определенное число раз, однако здесь вам не придется заботиться об указании этого числа. Оно точно совпадает с количеством элементов массива (или объектов семейства). Этот пример можно переписать с помощью структуры For-Next:
Sub ForNext()
Dim Студенты(5) As String
Dim Count1 As Integer
Студенты(1) = "Абрикосов"
Студенты(2) = "Богданов"
Студенты(3) = "Кузнецова"
Студенты(4) = "Милютин"
Студенты(5) =" Романова "
For Count1 = 1 To UBound(Студенты)
MsgBox Студенты(Countl)
Next
End Sub
Здесь нам пришлось определить переменную-счетчик Count1, чтобы организовать цикл и перебрать все элементы массива по номеру. Структура For-Each-Next избавляет нас от этой необходимости. Рассмотрим подробнее ее элементы, использованные в процедуре ForEachNext.
Эллемент |
Описание |
For Each |
Ключевые слова, отмечающие начало инструкции For-Each-Next |
Студент |
Переменная, которой присваиваются значения элементов группы – массива или семейства объекта. В первом случае переменная должна относиться к типу Variant. Во втором случае Вы можете определить ее как Variant, Object или приписать ей конкретный объектный тип, соответствующий объектам семейства |
In |
Ключевое слово, отделяющее переменную от группы |
Студенты |
Группа, то есть массив или семейство объектов. Количество повторений цикла совпадает с числом элементов в группе. Переменной цикла при первом выполнении присваивается значение первого элемента группы, затем – всех последующих элементов |
MsgBox Студент |
Действие, которое выполняется над элементом группы |
Next |
Ключевое слово, отмечающее конец инструкции. Достигнув его, программа возвращается к началу цикла – инструкции For Each. Если значение переменной цикла совпадет с последним элементом группы, выполнится инструкция, написанная сразу после Next |
ЗАМЕЧАНИЕ. В инструкции For-Each-Next значения элементов массива можно использовать, но нельзя изменять. На объекты семейств это ограничение не распространяется – изменение их свойств в инструкции For-Each допустимо.
