Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

В объектно-ориентированном программировании объект обычно определяется через понятие класс. Класс – это сложный тип, объединяющий данные и программы для их обработки, а объект – это переменная этого



Занятие 3

Понятие объекта

В объектно-ориентированном программировании объект обычно определяется через понятие класс. Класс – это сложный тип, объединяющий данные и программы для их обработки, а объект – это переменная этого типа (экземпляр класса).

Набор доступных классов определяется не языком, а теми библиотеками, которые подключены к вашему приложению, поэтому в каждом приложении (Word, Excel, Access и т.д.) набор классов (и объектов) разный. VBA позволяет создавать свои классы, но эта тема выходит за рамки нашего курса, мы будем использовать только имеющиеся классы.

Объекты устроены сложнее, чем переменные базовых типов, с которыми вы до сих пор имели дело, так как каждый объект – это множество данных и процедур. Данные, связанные с объектом, принято называть свойствами, а процедуры – методами объекта. Кроме свойств и методов объекты могут иметь еще и события. Событие – это действие, распознаваемое объектом, для которого можно запрограммировать отклик. Подробнее события будут рассмотрены позже. Члены класса (свойства, методы и события) создаются разработчиком класса, и вы не можете их изменить.

Свойство определяет характеристики объекта или его состояние. Оно имеет имя, тип и значение. В своих программах мы можем использовать свойства так же и там же, где мы используем переменные соответствующих типов. Типы у свойств могут быть как базовыми (integer, double и т.д.), так и классами. Все объекты одного класса имеют одинаковый набор свойств, но у каждого объекта свой собственный экземпляр значений этих свойств. Не существует свойства без объекта, поэтому для доступа к значению свойства в программе нужно указать имя объекта, точку и имя свойства. Если значение свойства в свою очередь является объектом, то можно снова поставить точку и указать свойство этого свойства, и т.д.

Объекты выполняют обработку данных с помощью методов. Так как метод – это процедура, он может иметь параметры и возвращать значение. Для вызова метода нужно указать имя объекта, поставить точку и затем указать имя метода. Если нужно, при вызове укажите значения фактических параметров (как для обычных процедур). Так же как свойство, метод не существует без объекта, так как в первую очередь он предназначен для работы с данными своего объекта.

Отдельные объекты могут быть объединены в коллекции (их также называют семействами). Коллекция – это специальный объект-контейнер, содержащий другие объекты (обычно одного класса). Много коллекций используется в приложениях Microsoft, причем названия класса объекта и коллекции там часто отличаются только окончанием «s». Например, в MS Excel Workbooks – это коллекция объектов класса Workbook (рабочих книг), Worksheets – коллекция объектов класса Worksheet (рабочих листов).



Добавление, удаление и другие операции с элементами коллекции реализуются с помощью методов соответствующих классов. Доступ к конкретному элементу коллекции возможен по номеру или по ключу. Нумерация элементов начинается с единицы. При использовании номера нужно указать имя коллекции и в круглых скобках – номер элемента, например, Worksheets(1). Доступ по ключу возможен в том случае, если при добавлении элемента в коллекцию ключ был задан. Ключ – это строка. В коллекции рабочих листов ключом является имя листа, поэтому мы можем обратиться к нужному листу, например, так: Worksheets("Решение"). В данном случае совершенно не важно, какой номер у этого листа, тем более что номер во время выполнения программы может измениться из-за добавления или удаления листов. Количество элементов в коллекции всегда можно узнать с помощью свойства Count. Это свойство доступно только для чтения.

Основные объекты MS Excel

Объектная модель Excel и других приложений Microsoft Office является иерархической. На нулевом уровне иерархии существует центральный объект, в который встроены другие объекты, составляющие первый уровень иерархии. В каждый из объектов первого и последующих уровней могут быть встроены объекты следующего уровня. Встраивание реализуется с помощью свойств объектов. Свойства могут быть терминальными, не являющимися объектами, и свойствами, которые возвращают объекты при их вызове.

Объектов в этой иерархии очень много. Учитывая, что у каждого объекта, в свою очередь, большое количество свойств, методов и событий, изучать их достаточно сложно. Поэтому мы рассмотрим только основные объекты. На первых порах достаточно использовать Application (Приложение), Workbook (Рабочая книга), Worksheet (Рабочий лист). Много в этой иерархии и коллекций: Workbooks – это коллекция рабочих книг, Worksheets – коллекция рабочих листов, Sheets – коллекция всех листов (рабочих листов и листов диаграмм), Charts – коллекция диаграмм, Range – коллекция ячеек таблицы.

Полное описание свойств, методов и событий каждого объекта можно найти в справочной системе. Для этого в редакторе Visual Basic откройте окно справки, в строке поиска наберите «Application Object Members» (для объекта Application) и перейдите по найденной гиперссылке. Для других объектов вместо Application укажите другое имя.

Объект Application – это главный объект в иерархии объектов Excel. Он представляет само приложение Excel. Через этот объект осуществляется доступ ко всем остальным объектам. На практике чаще всего используются следующие свойства объекта Application: ActiveWorkbook, ActiveWindow, ActiveSheet, ActiveChart, ActiveCell, представляющие активные объекты (рабочая книга, окно, лист, диаграмма, ячейка), Workbooks – коллекция всех рабочих книг, Selection – выделенный объект в активном окне (тип объекта зависит от текущего выделения). Свойства Range и Cells обеспечивают доступ к ячейкам активного рабочего листа. Все эти свойства являются объектами. Полезно также помнить, что метод Quit объекта Application завершает работу Excel.

Обычно свойства и методы объекта Application используют, не указывая слово Application. Например, вместо Application.ActiveCell.Value достаточно написать ActiveCell.Value. Свойство Value используется для доступа к значению объекта. В большинстве случаев оно является свойством по умолчанию, и его можно также опускать. Поэтому в нашем случае можно написать просто ActiveCell.

Каждая рабочая книга Excel представляется объектом WorkBook, а их коллекция – объектом Workbooks. Основные методы коллекции Workbooks (Add, Open, Close) позволяют добавить новую книгу в коллекцию, открыть существующую книгу и закрыть все книги коллекции. Указанные методы имеют параметры. Подробнее о параметрах можно прочитать в справочной системе. Проще всего это сделать, вызвав контекстную справку: установите курсор в тексте программы на имени интересующего свойства или метода и нажмите клавишу F1. У объекта WorkBook чаще всего используют свойства Sheets, Charts, WorkSheets (коллекции всех листов рабочей книги, диаграмм, рабочих листов) и методы Save, SaveAs, Close, Activate, предназначенные для сохранения, закрытия и активизации рабочей книги.

Рабочая книга Excel состоит из листов. Совокупность всех листов рабочей книги задается коллекцией Sheets. Основных типов листов в рабочей книге два – WorkSheet и Chart, соответственно имеются две коллекции для каждого типа листов. На практике для этих коллекций чаще всего используется метод Add, добавляющий новый лист в книгу. Метод возвращает созданный объект в качестве результата. Добавленный лист становится активным. Свойство Count у всех коллекций показывает количество элементов в коллекции. Для Sheets оно равно количеству листов.

Основные методы объекта WorkSheet реализуют операции с рабочими листами: Activate активизирует лист, Delete удаляет лист, Copy создает копию листа, Move перемещает лист, Calculate выполняет вычисления формул рабочего листа, Paste помещает содержимое буфера обмена на рабочий лист. Большинство методов имеют параметры, описание которых можно посмотреть в справочной системе.

Свойства Rows, Columns, Range и Cells объектов Application, Worksheet, ActiveSheet предназначены для работы с ячейками рабочего листа. Все они возвращают объект Range, но по-разному определяют эту коллекцию ячеек. Свойство Range удобно в тех случаях, когда для определения ячеек используются адреса: ActiveSheet.Range("A5"), ActiveSheet.Range("A1:D25"). Свойство Cells используется для указания конкретной ячейки с помощью ее номера строки и столбца. Например, ActiveSheet.Cells(5, 1) – это ячейка A5 активного листа. Свойства Rows и Columns – это коллекции, содержащие все строки и столбцы рабочего листа. Для доступа к конкретной строке или столбцу нужно указать его номер: ActiveSheet.Rows(1), ActiveSheet.Columns(2).

Объект Range – это основной объект, с которым приходится работать программисту. Объект является коллекцией ячеек таблицы, которая может содержать как единственную ячейку таблицы, так и столбец или строку, некоторую связную и не связную прямоугольную область, а также объединение и пересечение всех подобных элементов. Для создания объекта чаще всего используются свойства Range, Cells, Rows, Columns, рассмотренные выше. Основные свойства объекта: Value – значение ячейки (свойство по умолчанию, поэтому часто опускается); Text – строка текста, связанного с ячейкой (только для чтения); Formula, FormulaLocal, FormulaR1C1, FormulaR1C1Local – формула в различных форматах; CurrentRegion – возвращает объект Range, в состав которого входит заданный диапазон (границами возвращаемого объекта являются пустые строки и столбцы или границы таблицы); Address – возвращает строку, задающую ссылку на объект Range; Column, Row – возвращают соответственно номер первого столбца или первой строки объекта Range; Font – возвращает объект Font (шрифт).

Объект Range имеет около 80 методов. Все, что вы можете сделать с диапазоном ячеек в Excel, скорее всего, реализовано с помощью метода объекта Range. Например, сортировка – это метод Sort, заполнение диапазона – метод AutoFill, выделение диапазона – метод Select и так далее. Большинство методов имеют параметры. Для изучения методов рекомендуется записать макрос, выполняющий нужную команду, и проанализировать полученный код. Описание методов можно найти в справочной системе Excel.

Работа с объектами

Как мы уже выяснили, объект – это переменная специального типа. Работа с такими переменными в программе похожа на работу с переменными других типов: мы можем их объявлять, присваивать им значения, сравнивать – но в то же время имеет свою специфику. На самом деле объектная переменная хранит ссылку на область памяти, в которой размещена вся информация, относящаяся к объекту. Поэтому любая объектная переменная всегда занимает 4 байта. Это определяется моделью памяти, а не классом. Используя объектную переменную, мы получаем доступ к свойствам, методам и событиям объекта.

Для описания объектной переменной используются обычные инструкции Dim, Public, Private или Static. В качестве типа можно указать Variant, Object или имя класса. Тип Object позволяет создать универсальную ссылку на любой объект. Он используется в том случае, если объектный тип не известен до выполнения процедуры. Например:

Важно понимать, что описание объектной переменной не означает создание объекта. Чтобы переменная ссылалась на объект, объект нужно создать и присвоить эту ссылку в качестве значения переменной.

Присвоение значения объектной переменной выполняется с помощью инструкции Set:

Set Переменная = Выражение | New ИмяКласса | Nothing

Слева от знака равно может стоять, в том числе, имя свойства, если свойство является объектом. Выражение, стоящее справа, может быть именем другой переменной того же типа, функцией, методом или свойством, которые возвращают объект того же типа. Ключевое слово New используется для создания нового экземпляра объекта указанного класса (можно использовать не для всех классов). Присваивание Nothing (пустая ссылка) разрывает связь переменной с объектом. Когда переменная получает значение Nothing, все системные ресурсы и ресурсы памяти, выделенные для объекта, на который имелась ссылка, освобождаются, если никакие другие переменные на него не ссылаются.

При использовании инструкции Set копия объекта обычно не создается. Значением переменной является ссылка на объект. Следовательно, несколько объектных переменных могут ссылаться на один и тот же объект. Поэтому любые изменения объекта отражаются на всех переменных, которые ссылаются на него.

В качестве примера рассмотрим создание нового рабочего листа (объекта Worksheet). Лист создается с помощью метода Add, который возвращает ссылку на новый лист, и эту ссылку мы присваиваем переменной newSheet1.

Для сравнения объектных переменных используется специальная операция Is (обычную операцию равно использовать нельзя). Если переменные содержат ссылки на один объект, результат имеет значение True, в противном случае результат – False.

В приведенном ниже примере выполняется поиск слова «Образец» в столбце B листа Лист1. В случае обнаружения нужного слова метод Find вернет ссылку на найденную ячейку, в противном случае – пустую ссылку. Результат поиска сохраняется в переменной FC. Так мы можем проверить, чем закончился поиск:

Иногда во время выполнения программы требуется узнать класс объекта, на который ссылается переменная. В этом случае следует использовать операцию TypeOf. Так, например, мы можем проверить тип значения переменной O1:

Инструкция With дает возможность выполнить последовательность действий над объектом, не повторяя его имени. Обращение к свойствам и методам объекта внутри инструкции начинается с точки. Инструкция не только облегчает чтение и написание программы за счет уменьшения объема текста, но и позволяет создать более эффективный код, так как ссылка на объект вычисляется один раз. Синтаксис инструкции:

With Объект

[ Инструкции ]

End With

Пример использования инструкции:

В примере форматируются ячейки A1:C10 листа Лист1 (шрифт – полужирный, цвет фона – желтый). Как видим, ссылка на необходимый диапазон указывается один раз, хотя изменяются значения двух свойств объекта.

Макросы MS Excel

Если какое-то действие часто повторяется, его выполнение можно автоматизировать с помощью макроса. Макрос — это набор инструкций на VBA, то есть программа. Вместо того чтобы каждый раз выполнять вручную одни и те же операции, можно просто выполнить эту программу.

Одним из простейших способов создания программы на VBA является запись последовательности действий с помощью специальной функции записи макросов Excel. Чтобы записать макрос:

1. Выполните команду Разработчик/ Код / Запись макроса.

2. В появившемся окне задайте необходимые параметры. На начальном этапе изучения можно принимать параметры, указанные по умолчанию. Нажмите OK.

3. Выполните необходимые действия. Они будут записываться в виде программы на языке VBA.

4. Для остановки записи макроса достаточно щелкнуть на голубом квадратике, который находится в строке состояния Excel. Можно также выполнить команду Разработчик/ Код/ Остановить запись.

Для просмотра текста макроса перейдите в редактор и откройте нужный модуль. Если в проекте до записи макроса программных модулей не было, новый макрос будет находиться в модуле Module1. Можно выполнить команду Разработчик/ Код/ Макросы, в открывшемся окне выбрать имя нужного макроса и нажать на кнопку Изменить.

Задать или изменить комбинацию клавиш, которая будет использоваться для вызова макроса, или его описание можно в момент создания макроса или позднее, выполнив команду Разработчик/ Код/ Макросы. В открывшемся окне выбрать имя нужного макроса и нажать на кнопку Параметры. При назначении макросу комбинации клавиш, которая уже используется в Excel, данная команда имеет преимущество перед зарезервированной операцией.

Для выполнения макроса можно использовать несколько способов:

1. команда Run/ Run Sub/User Form, или инструмент , или клавиша F5 в редакторе VBE (курсор должен находиться внутри макроса);

2. в диалоговом окне Макрос (команда Разработчик/ Код/ Макросы) выбрать имя макроса и нажать кнопку Выполнить;

3. с помощью комбинации клавиш, назначенной макросу.

С точки зрения VBA макрос представляет собой процедуру Sub без параметров, написанную в программном модуле, которую совсем не обязательно создавать с помощью функции записи макросов. Любая процедура, удовлетворяющая приведенным выше условиям, будет макросом (будет вызываться из окна Макрос). Функция записи макросов очень удобна для изучения VBA, однако программы, созданные таким образом, часто содержат лишний код.

Пример 3.1. Создайте новую книгу в Excel. Измените размер окна Excel так, чтобы оно занимало примерно половину экрана. Откройте окно редактора VBE и измените его размер, чтобы оно занимало оставшуюся часть экрана. Перейдите в окно Exсel и выполните команду Разработчик/ Код / Записать макрос. В появившемся окне нажмите OK. Перейдите в окно VBE. Откройте окно модуля Module1. Можно закрыть окна Project и Properties для экономии места. Если понадобится, эти окна можно вывести по команде View/ Project Explorer или View/ Properties Windows. В результате этих действий, выполняя команды Excel, можно видеть, какой код генерируется в макросе.

Вернитесь в ячейку A1. Установите следующие параметры форматирования: шрифт – Arial, размер шрифта – 14, цвет шрифта – красный. Остановите запись макроса. В этот момент экран будет выглядеть приблизительно так:

Как видим, автоматически была создана довольно длинная процедура, в которой большинство инструкций не нужны для решения нашей задачи. Напишем в этом же модуле процедуру Макрос2 (можно использовать команду Insert/ Procedure), в которую скопируем из первой только строки, приведенные ниже. Созданный таким образом второй макрос можно вызвать так же, как первый, и результат их работы одинаковый.

В автоматически созданных макросах часто сначала выделяется диапазон ячеек, а затем уже у объекта Selection используется нужное свойство или метод. В этом нет необходимости. Можно сразу применять те же действия к диапазону, заданному с помощью Range, Cells, ActiveCell и других свойств. Если убрать из нашего макроса инструкцию Range("A1").Select, то он станет более универсальным, так как форматирование будет выполняться для любого выделенного диапазона. Если при этом Selection заменить, например, на ActiveCell, то будет форматироваться активная ячейка.

Обратите внимание, как задается цвет. Использованная числовая константа соответствует некоторому оттенку красного цвета. Запомнить такую константу невозможно, да и не нужно. Всегда можно записать макрос и потом воспользоваться автоматически созданным значением. Однако в языке есть и другие способы задания цветов. Во-первых, для основных цветов существуют именованные константы (для красного это vbRed), поэтому можно было бы эту инструкцию записать в виде

(посмотрите в справке, какие еще есть константы цвета, для этого установите курсор на имени константы и нажмите клавишу F1). Во-вторых, можно использовать функцию RGB (название от red-green-blue). У этой функции 3 аргумента, каждый из которых может иметь значение от 0 до 255 и задает долю красного, зеленого и синего компонента в цвете. RGB(255, 255, 255) соответствует белому цвету, RGB(0, 0, 0) – черному. Если аргументы имеют одинаковые значения, то получим оттенок серого. Самому яркому красному цвету соответствует значение RGB(255, 0, 0).

У созданных макросов задайте описание и комбинацию клавиш для вызова. Для этого выведите окно Макрос (Разработчик/ Код/ Макросы), выберите имя макроса и нажмите кнопку Параметры. Введите необходимые значения в соответствующие поля. Попробуйте вызвать макрос на рабочем листе, используя указанное сочетание клавиш.

Пример 3.2. Рассмотрим, как при автоматическом создании макроса записывается вставка формулы в ячейку. В качестве примера запишите макрос, который вставляет в ячейку C7 формулу "=ОКРУГЛ(A7+$A$1*B7;2)" (функция округляет значение первого аргумента до двух знаков после запятой). В тексте макроса появится инструкция:

Как видим, строка с формулой присваивается свойству FormulaR1C1, но выглядит формула иначе. Во-первых, используется другое имя функции. На самом деле в формуле использовано имя нашей функции в англоязычной версии. Во-вторых, ссылки на ячейки выглядят странно. Дело в том, что для ссылок на ячейки в Excel используются два стиля: A1 и R1C1. Обычно вы работаете со ссылками в стиле A1: ссылка состоит из имени столбца (обозначаются латинскими буквами) и номера строки. Признаком абсолютной ссылки является знак доллара перед именем строки или столбца. Макросы используют стиль R1C1. В этом случае после буквы R указывается номер строки ячейки, после буквы C – номер столбца. Для задания относительной ссылки в стиле R1C1 указывается смещение по отношению к активной ячейке (в квадратных скобках). Знак определяет направление смещения. Например, RC[-1] (относительная ссылка на ячейку, расположен­ную в той же строке в предыдущем столбце), R[3]C[2] (относительная ссылка на ячейку, расположенную на три строки ниже и на два столбца правее), R2C2 (абсолютная ссылка на ячейку, расположенную во второй строке во втором столбце), R[-1] (относительная ссылка на предыдущую строку), R (абсолютная ссылка на текущую строку).

При автоматическом создании макросов формулы всегда записываются в таком виде, но если вы сами пишете текст макроса, то вместо свойства FormulaR1C1 можно использовать свойство FormulaLocal. В этом случае вы можете использовать в формуле формат A1 и привычные (на языке пользователя) названия функций:

Задания для самостоятельной работы:

3.1. Попробуйте выполнять различные действия в Excel при включенной функции записи макросов. Проанализируйте полученные тексты программ. Научитесь пользоваться справочной системой.

3.2. Создайте макрос, который изменяет формат первой буквы текста активной ячейки: цвет – зеленый, шрифт – Monotype Corsiva, размер увеличивает на 2 (Указание: воспользуйтесь контекстной справкой для свойства Font (вариант Font(object)), в разделе Remarks есть гиперссылка для свойства Characters, перейдите по ней и прочитайте, как можно форматировать часть строки).


Дата добавления: 2015-11-04; просмотров: 26 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
 | Типы данных, переменные, константы

mybiblioteka.su - 2015-2024 год. (0.016 сек.)