- •2.1. Алфавит и словарь языка
- •2.2. Переменные
- •2.3. Константы
- •2.4. Строковые переменные
- •2.5. Массивы
- •2.6. Пользовательские типы данных
- •2.7. Операции VBA
- •2.8. Объектная модель Excel
- •2.8.1. Свойства и методы объектов
- •2.8.2. Отображение объектной модели Excel
- •2.8.2.1. Иерархия объектной модели
- •2.8.2.2. Ссылка на объекты в коде VBA
- •2.8.3. Работа с объектами
- •2.8.3.1. Задание свойств объекта
- •2.8.3.2. Использование методов объекта
- •2.8.3.3. Переменные-объекты
- •2.8.3.4. Коллекции
- •2.8.3.5. Метод Add
- •2.8.3.6. Свойство Count
- •2.8.4. Свойства и методы основных объектов Excel
- •2.8.4.1. Объект Application
- •2.8.4.2. Объект Worksheet
- •2.8.4.3. Объект Range
- •2.8.5. Просмотр объектов
- •2.8.6. Использование справочной системы
- •2.8.6.1. Использование функциональной клавиши F1
- •2.8.6.2. Использование помощника
- •2.9. Ввод и вывод данных
- •2.9.3. Метод InputBox
- •2.9.4. Объединение текстовых строк
- •2.10. Концепция событий Excel
- •2.10.1. Типы событий Excel
- •2.10.2. События объекта Workbook
- •2.10.3. События объекта Worksheet
- •2.10.4. События объекта Application
- •2.10.5. События объекта UserForm
- •2.10.6. События, не связанные с конкретными объектами
- •2.10.6.1. Метод OnKey
- •2.10.6.2. Событие OnTime
- •2.11. Формы пользователя
- •2.11.1. Свойства, методы и события экранных форм
- •2.11.1.1. Некоторые свойства форм
- •2.11.1.2. Некоторые методы форм
- •2.11.1.3. Некоторые события форм
- •2.11.2. Элементы управления
- •2.11.2.1. Элемент управления Label (Надпись)
- •2.11.2.1.1. Окно свойств формы
- •2.11.2.2. Элемент управления CommandButton (Кнопка)
- •2.11.2.3. Элемент управления TextBox (Текстовое поле)
- •2.11.2.4. Элемент управления ComboBox (комбинированный список)
- •2.11.2.5. Элемент управления ListBox (список)
- •2.11.2.6. Элемент управления CheckBox (Флажок)
- •2.11.2.7. Элемент управления ToggleButton (Выключатель)
- •2.11.2.8. Элемент управления OptionButton (Переключатель)
- •2.11.2.9. Элемент управления Image (Рисунок)
- •2.11.2.12. Элемент управления RefEdit (Поле со свёртыванием)
- •2.11.2.13. Элементы управления на рабочем листе
- •2.12. Инструкции VBA
- •2.12.1. Оператор присваивания
- •2.12.2. Инструкция Set
- •2.12.3. Циклы
- •2.12.3.1. Инструкция For… Next
- •2.12.3.2. Инструкция While…Wend
- •2.12.3.3. Инструкция Do... Loop
- •2.12.3.4. Инструкция For Each…Next
- •2.12.4. Инструкции перехода
- •2.12.4.1. Инструкция условного перехода If…Then…Else
- •2.12.4.2. Инструкция Select…Case
- •2.12.4.3. Инструкция безусловного перехода GoTo
- •2.12.4.4. Инструкции перехода к обработчику ошибок On Error
- •2.12.4.5. Инструкции прерывания выполнения блока Exit
- •2.13. Функции VBA
- •2.13.1. Встроенные функции
- •2.13.1.1. Математические функции
- •2.13.1.2. Функции преобразования данных
- •2.13.1.3. Функции даты и времени
- •2.13.1.4. Строковые функции
- •2.13.1.5. Примеры использования функций VBA
- •2.13.1.5.1. Удаление ненужных символов
- •2.13.1.5.2. Определение длины строки
- •2.13.1.5.3. Сравнение и поиск строк
- •2.13.1.5.4. Выделение части строки
- •2.13.1.5.5. Форматирование значений данных
- •2.13.2. Функции, определённые пользователем
- •2.14. Файлы VBA
- •2.14.1. Типы файлов в VBA
- •2.14.2. Открытие и закрытие файла
- •2.14.3. Ввод данных в файл последовательного доступа
- •2.14.4. Вывод данных из файла последовательного доступа
- •2.14.5. Работа с файлом произвольного доступа
- •2.15. Создание процедуры
- •2.16. Выполнение процедуры
- •2.17. Сохранение процедуры
- •2.18. Запись последовательности действий пользователя
- •2.19. Просмотр кода макроса
- •3.1. Тестирование и отладка как этап разработки приложений
- •3.1.1. Отладка
- •3.1.1.1. Режим останова
- •3.1.1.2. Использование окна Immediate
- •3.1.1.2.1. Просмотр значений в окне Immediate
- •3.1.1.3. Пошаговое выполнение программ
- •3.1.2. Исправление ошибок
- •Библиографический список
- •Оглавление
28
Здесь Workbooks и Worksheets – это коллекции, Книra1 – это элемент коллекции Workbooks. Объект Range не является коллекцией. Одно из определяющих свойств коллекции – возможность добавлять в нее новые элементы. В объект Range нельзя добавить другие диапазоны ячеек, так как в Excel диапазоны жестко определены и ограничены еще во время их задания.
На рис. 1 внизу окна объектной модели Excel приведены обозначения цветовых выделений объектной модели. Желтым цветом выделены объекты и коллекции, голубым – объекты, не являющиеся коллекциями.
2.8.3.5. Метод Add
В коллекции можно добавлять новые элементы. Для этого используется метод Add (Добавить). Например, новую рабочую книгу можно создать с помощью следующего кода:
Workbooks.Add
Этот код эквивалентен выполнению в Excel команды Файл | Создать. Чтобы добавить новый лист в рабочую книгу, используется код
Worksheets.Add
2.8.3.6. Свойство Count
Свойство коллекции Count (Счет) хранит количество элементов, составляющих коллекцию. Для определения количества листов в текущей рабочей книге можно использовать следующие инструкции:
Dim КолРабЛист As Integer КолРабЛист = Worksheets.Count
Можно найти много применений свойству Count. Предположим, вы создаете приложение, где рабочая книга должна содержать отдельный лист на каждый рабочий день недели. С помощью свойства Count можно проверить, сколько содержит рабочая книга рабочих листов. Код процедуры представлен ниже.
Sub КолРабЛист () Dim КолРЛ As Byte Dim Сообщ As String
КолРЛ = Worksheets.Count
Сообщ = "Книга содержит " & КолРЛ Сообщ = Сообщ & " листов " MsgBox Сообщ
End Sub
2.8.4.Свойства и методы основных объектов Excel
2.8.4.1.Объект Application
Объект Application (Приложение) занимает самый верхний уровень иерархии объектов Excel и управляет установками и параметрами уровня
29
приложения, т.е. такими, которые можно найти в диалоговом окне Параметры программы Excel.
Объект Application содержит также встроенные функции Excel, и его необходимо использовать для применения в процедуре VBA встроенных функций Excel. В процедуре МодФункции моделируются функции Excel Average (Среднее) и Sum (Сумма).
Option Base 1 Sub МодФункции()
Dim Число As Variant Число = Array(10, 20, 30, 40) Dim СрЗнач As Integer
СрЗнач = Application.Average(Число)
MsgBox "Среднее значение массива = " & СрЗнач
MsgBox "Сумма значений массива = " & Application.Sum(Число) End Sub
В процедуре МодФункции для подсчёта среднего значения и суммы используются функции VBA Excel Average и Sum, параметром которых является массив Число, значения которого задаются при помощи функции VBA Excel Array. Ниже приведены результаты выполнения процедуры
МодФункции.
Этот пример показывает, что для использования встроенных функций Excel необходимо указывать объект Application и аргументы функций.
Объект Application имеет множество свойств и методов. Из свойств выделим следующие.
ActiveWorkbook – возвращает активную (текущую) книгу.
ActiveSheet – возвращает активный лист в активной рабочей книге. Возвращаемый лист может быть любого поддерживаемого типа, включая рабочий лист и лист диаграмм.
ActiveCell – возвращает активную ячейку на активном листе активной рабочей книги.
ThisWorkbook – возвращает рабочую книгу, где находится выполняемая процедура.
Selection – определяет текущее выделение. Выделением может быть диапазон ячеек, элементы диаграммы и т.п.
Среди методов объекта Application выделим следующие.
InputBox – отображает окно ввода и позволяет указать тип возвращаемого значения.
30
OnKey – устанавливает выполнение указанной процедуры при нажатии заданной комбинации клавиш.
OnTime – назначает выполнение указанной процедуры на определённое время.
Quit – применяется для выхода из Excel.
2.8.4.2. Объект Worksheet
Объект Worksheet представляет собой рабочий лист. В Excel рабочий лист можно выбирать, переименовывать, копировать, удалять, вставлять новый лист в рабочую книгу. Для выполнения таких же и множества других действий с объектом Worksheet используются его многочисленные свойства и методы.
Свойства объекта Worksheet
Из многочисленных свойств объекта Worksheet рассмотрим следующие, наиболее употребительные.
1. Cells – возвращает ячейку рабочего листа.
Формат свойства:
Worksheets(индекс).Cells(<№ строки>,<№ столбца>),где
индекс – номер или имя рабочего листа,
<№ строки>,<№ столбца> – целочисленные выражения, задающие значения № строки и № столбца рабочего листа.
Пример
‘Ячейка, находящаяся в строке 2 в столбце 5 (ячейка E5) листа Лист1, получает значение 10.
i=1
k=5 Worksheets(Лист1).Cells(i*2+1,k).Value=10
2. Name – возвращает имя рабочего листа.
Формат свойства:
ActiveSheet.Name = < имя рабочего листа>
Пример
‘Активный рабочий лист получает имя “Товары”
ActiveSheet.Name =“Товары”
Методы объекта Workbook
При работе с объектом Worksheet часто применяются следующие методы:
Activate – активизирует рабочий лист;
Add – вставляет новый лист в рабочую книгу;
CheckSpelling – используется для проверки орфографии содержимого рабочего листа;
Delete – удаляет рабочий лист из рабочей книги.
Пример
31
В приведённом ниже коде объявляется переменная-объект НовыйЛист, которой затем назначается создаваемый рабочий лист с именем Склад.
Dim НовыйЛист As Worksheet Set НовыйЛист = Worksheets.Add
НовыйЛист.Name= “Склад”
2.8.4.3.Объект Range
ВVBA ячейки рабочего листа трактуются как объект Range. Среди всех объектов Excel этот объект используется наиболее часто.
Вкачестве объекта Range могут выступать:
отдельная ячейка;
выделенный диапазон ячеек;
несколько выделенных диапазонов ячеек (т.е. совокупность несмежных диапазонов);
строка и столбец;
трехмерный диапазон (т.е. состоящий из диапазонов, расположенных на разных рабочих листах).
Свойства объекта Range
Из множества свойств объекта Range, которых у него несколько десятков, рассмотрим следующие, наиболее часто используемые.
Address (Адрес) – возвращает текущее положение диапазона.
Count (Счет) – возвращает количество ячеек в диапазоне.
Formula (Формула) – возвращает формулу, по которой вычисляется значение, отображаемое в ячейке.
Offset (Смещение) – возвращает величину смещения одного диапазона относительно другого.
Resize (Изменение размеров) – позволяет изменять текущее выделение диапазона.
Value (Значение) – возвращает значения ячеек, составляющих диапазон.
Пример
На листе Лист1 в ячейке B4 находится число 4 и в ячейке A1 – формула =B4. В модуле Module1 хранится процедура СвойстваДиапазона:
Sub СвойстваДиапазона()
Worksheets("Лист1").Range("A1:B2").Activate
MsgBox "Количество ячеек в диапазоне " & Range("A1:B2").Count MsgBox "Текущая ячейка " & ActiveCell.Address ActiveCell.Offset(2, 2).Activate
MsgBox "Текущая ячейка " & ActiveCell.Address Range("A1").Formula = "=B4"
MsgBox "Формула в ячейке A1 " & Range("A1").Formula MsgBox "Значение ячейки A1= " & Range("A1").Value
End Sub
32
Инструкция
Range("A1:B2").Activate
выделяет диапазон A1:B2 рабочего листа Лист1 при помощи метода
Activate (рис. 3).
Рис.3. Выделение диапазона ячеек
Функции
MsgBox "Количество ячеек в диапазоне " & Range("A1:B2").Count MsgBox "Текущая ячейка " & ActiveCell.Address
выводят при помощи свойств Count и Address количество ячеек в выделенном блоке и адрес текущей ячейки:
Текущая ячейка получила адрес $C&3 в результате выполнения инструкции
ActiveCell.Offset(2, 2).Activate
свойство которой Offset(2,2) задаёт смещение на две ячейки относительно ячейки A1.
Инструкция
Range("A1").Formula = "=B4"
Помещает формулу =B4 в ячейку A1.
Функции
MsgBox "Формула в ячейке A1 " & Range("A1").Formula MsgBox "Значение ячейки A1= " & Range("A1").Value