Основные понятия в VBA. Объекты и их характеристики. События.
Сегодня разбираемся с объектами, коллекциями, свойствами, методами и событиями, используемыми VBA. Это основные понятия, используемые при создании программ. На самом деле рассматриваемый вопрос важен. Уверенное владение такими тонкостями позволит грамотно строить код программы, избегая ошибочных действий. Сразу отметим, что приведенные примеры будут абстрактными. Тем не менее такой подход позволяет изучить материал, не отвлекаясь на ненужную конкретику.
Поговорим для начала об объектах. Если посмотреть справку, то объект – это элемент приложения, над которым возможно совершение действий. Объект создается, изменяется, копируется, перемещается, удаляется, используется другими способами во время работы программы.
Такая формулировка кажется логичной. Объектом для программы будет строка, ячейка, лист, книга, приложение. Теперь посмотрим отрывок кода макроса:
Dim a as Integer
A=8
A=A mod 2
Коротко рассмотрим происходящее. Объявляется переменная. Имя переменной задано как «A». Тип созданной переменной определен как Integer. Затем этой переменной присваивается значение 8. Наконец, значение переменной меняется на результат целочисленного остатка деления старого значения на 2. Зададим себе вопрос. Переменная А является элементом нашего приложения? Да. С указанной переменной совершаются действия? Да. Но можно ли назвать переменную «А» объектом? НЕТ.
На данном этапе мы подошли к важному понятию – что же является объектом. Объект – это не просто элемент программы, который может быть обработан. Это элемент программы, который отображается визуально, имея отслеживаемые программой конкретные параметры. Любое окно является объектом. Любая ячейка, любой лист Excel является объектом. Пользовательские программы, макросы, процедуры, функции, тем более переменные объектами не являются. Почему это важно? Программы не работают в воздухе. Цель любой программы – выявление или изменение параметров именно объектов. Поэтому необходимо знать, какие объекты программа использует, а с какими объектами программа работать не будет. Объекты обычно образуют иерархию. Объект-приложение включает объекты-рабочие книги, рабочие книги состоят из объектов-листов. Список можно продолжить.
Для удобства работы объекты одного типа (но не всегда) объединяют в группы, которые называю коллекциями. Обратиться к элементам коллекции можно либо по их номеру, либо по названию. Представим себе задачу. Необходимо сохранить все открытые книги Excel. Как это выполнить? Можно заранее узнать имена открытых книг и послать им по очереди команду для сохранения. На практике такой подход неудобен, так как список открытых книг меняется. Гораздо удобнее обратиться к коллекции WorkBooks. 1Данная коллекция изначально содержит каждую открытую на текущий момент книгу Excel. Для обработки применим цикл For Each
For Each S in Workbooks
Save
Next S
Всего три строки вместо перечисления всех книг вручную. Удобно? Конечно!
На следующем шаге мы разберемся, что представляют собой методы и свойства объектов. Рассмотрим, как эти параметры соотносятся между собой, и какая между этими параметрами объектов разница.
Метод представляет собой действие, которое может быть совершено как самим объектом, так и над объектом.
Примеры методов
Sheets.Add – добавляем лист
ActiveSheet.Paste – вставить на текущий лист.
ActiveCell.Interior. – выполнить заливку активной ячейки
Свойством же является характеристика объекта, Свойство всегда имеет определенное значение. Приведем пример.
Sheets.Add
– этот оператор позволяет создать лист. Оператор не содержит никакой информации о расположении и количестве добавляемых листов. Если же написать так
Sheets.Add Before:=Sheets(1), Count:=2
– то здесь будет добавлены два листа, причем непроизвольно, а в начале текущей книги. Здесь используются такие свойства добавляемых листов, как расположение и количество.
ActiveCell.Interior – метод изменения заливки ячейки. НО здесь нет никакой информации о конкретном цвете заливки. А вот если написать так –
ActiveCell.Interior.Color=RGB(0,255,0) – то ячейка зальется именно зеленым цветом.
Если рассматривать все эти термины в целом, то можно проследить явную аналогию с обычной речью. Действительно, объекты по сути идентичны именам существительным, методы аналогичны глаголам, а свойства — прилагательным. Однако есть одна тонкость. В реальной жизни, по крайней мере, в русском языке, порядок слов в предложениях произволен. Рассмотрим предыдущий пример. Нам требуется залить активную ячейку зеленым цветом. Как сказать об этом сотруднику? Сказать именно так, как указано выше– закрась активную ячейку зеленым цветом. Или – зеленым цветом закрась активную ячейку. Особой разницы нет. А вот в программе порядок элементов важен. В программе та же фраза будет звучать так – работаем с активной ячейкой, заливку фона делаем зеленой. Обратите внимание на порядок
ActiveCell.Interior.Color=RGB(0,255,0)
Попробуем произнести словами указанную команду. Результат прозвучит так
Для активной ячейки (объект) выполнить заливку (метод) цветом (свойство), задав для нее указанный вариант (значение).
Таким образом, подведем итог. Работа макросов выполняется путем изменения характеристик обрабатываемых объектов. Такие изменения свойств объектов с помощью методов, воспринимаемых объектом. Изменение свойств происходит путем изменения значений. Стоит отметить, что далеко не каждое свойство объектом изменяются программным путем. К примеру, изменить пользовательское имя листа при выполнении программы возможно. А вот программное имя листа изменить нельзя.
Итак, на нашем занятии рассмотрена взаимосвязь между объектами, коллекциями, методами, свойствами. Осталось понять, каким образом программа определяет, что свойства объекта требуется изменить, или с объектом требуется совершить ту или иную работу? Ответ несложен. Это отслеживается по событиям. Событием называется произошедшее или выполняемое действие, распознаваемое объектом. События отслеживается программой по ходу ее работы. Стоит отметить, что наличие значений для свойств объекта уже говорит о произошедшем событии. Дело в том, что изначально параметры каждого объекта либо пустые, либо содержат стандартные значения. К примеру, содержимое ячеек, заливка ячеек изначально отсутствуют. Значение ширины столбцов на листе стандартно. Отличие этих значений от стандартных вариантов или наличие значения свойства объекта, которое изначально было не заданным, как раз говорит о том, что с объектом произошло событие. Таким образом, значения свойств объекта, точнее, изменение свойств, используется как событие для определения работы программы.
Отслеживая события объектов совместно с соответствующими объектам методами, появляется возможность изменений свойств объектов для достижения нужных результатов. Очевидно, что для этого требуется знать принцип обращения к объектам, методы работы с ними. Это и будет темой следующего урока.
Текущее же занятие подошло к концу. Желаем нашим посетителям успехов и хорошего настроения.