Программирование на VBA с использованием объектов Лекция 1. 18.11.04 посл. редакция 1.12.04 Лекция 2. 25.11.04 посл. редакция 2.12.04 Программирование на VBA с использованием объектов Лекция 1. 18.11.04 Подходы к разработке программ Сверху-вниз От главного к деталями Подпрограммы создаются под конкретную задачу Снизу-вверх Сначала создаются и подбираются инструменты — подпрограммы и дополнительные типы данных Инструментарий может может быть рассчитан на написание многих программ. Повторное использование подпрограмм Подпрограммы Модули Группа операций как одна команда Может выполняться с разными значениями параметров Процедуры, функции, константы, переменные группируются по темам Классы Описывают дополнительные типы данных их свойства и возможные операции над значениями этих типов Экземпляры классов называются объектами Идея Многих Исполнителей Процедурный язык Один исполнитель — компьютер Ваша программа отдает приказания при помощи операторов и вызовов процедур Объектноориентированный язык Много исполнителей Ваша программа командует исполнителями, вызывая встроенные в них процедуры (методы) и изменяя их свойства. Исполнители в VBA Объекты встроенных классов Управляющие элементы ActiveX Workbook, Worksheet, Document, Table Объекты, для управления другими приложениями и подсистемами Пользовательские формы Окна, содержащие поля для ввода текста, кнопки, диаграммы и другие элементы для взаимодействия с пользователем Классы Класс формальное описание объекта. Класс играет роль типа данных Описываются члены класса: переменные и подпрограммы Переменные такого типа называются объектами или экземплярами классами Объекты принадлежащие определенному классу называются экземплярами класса Обращение к исполнителям в VBA: ссылка.метод(параметры) Реальный мир Программа Петя, повернись налево! Заключенный № 1134, прекратите разговоры! Эй! В шляпе, третьим будешь? T1.Move(12, -5) Debug.Print T2.DistanceTo(t1) Сылки (References) «Петя», «Заключенный № 1134», «Эй! В шляпе», T1 и T2— ссылки на исполнителей Оператор Set Копирует ссылку но не объект Пример OldRef.Value=5 Set NewRef = OldRef Debug.Print NewRef.Value 5 NewRef.Value=6 Debug.Print OldRef.Value 6 Оформление классов Обозреватель проектов Окно кода Окно свойтсв Окно отладочного вывода вывода Project Explorer Модули разных типов вставляются в проект в меню Insert: •Модуль •Модуль Класса •Ссылка на шаблон •Документ •Пользовательская форма Описание класса Демо-пример: класс Точка Public x As Double Public y As Double Sub Move(px As Double, py As Double) x = x + px y = y + py End Sub Function DistanceTo( p As PointClass) As Double DistanceTo = Sqr((x - p.x) ^ 2 + (y - p.y) ^ 2) End Function Демо-пример: класс Точка Продолжение Sub InputFromUser() x = CDbl(InputBox("Введите x", "Ввод координат точки")) y = CDbl(InputBox("Введите y", "Ввод координат точки")) End Sub Sub ShowLocation() MsgBox "(" & x &", " & y & ")", , "Координаты" End Sub Создание экземпляра Sub PointDemo() Dim t1 As PointClass Dim t1 As PointClass Set t1 = New PointClass Set t1 = New PointClass t1.InputFromUser t2.x = 4 t2.y = 2 t1.Move -2, 4 MsgBox “Расстояние между точками =" & t1.DistanceTo(t2), , "Расстояние" End Sub Программирование на VBA с использованием объектов Лекция 2. 25 ноября 2004 г. Объектные переменные – ссылки (reference) Ссылка хранит адрес объекта На один объект может быть много ссылок Когда количество действующих ссылок падает до нуля объект уничтожается Память занимаемая уничтоженным объектом отдается в общий фонд Команда Set оператор присваивания для объектных переменных Set копирует ссылку но не объект Пример 1 Sub присваиваниеСсылок1() 'создаются переменные ссылки Dim t1 As PointClass, t2 As PointClass Set t1 = New PointClass 'Создается объект Set t2 = t1 ' объект по-прежнему один, а ссылок 2 t2.x=5: t2.y=7 Debug.Print t1.x, " ", t1.y Debug.Print t2.x, " ", t2.y ' Ссылка после присваивания Nothing ни на что не ' указывает Set t1 = Nothing ' объект по-прежнему жив. 1 ссылка End Sub ' После выхода из процедуры локальные переменные ' прекращают свое существование и объект, ' на который никто не ссылается уничтожается Пример 2 Dim tGlobal As PointClass Sub присваиваниеСсылок2() 'создается переменная ссылка Dim t1 As PointClass Set t1 = New PointClass 'Создается объект Set tGlobal = t1 ' объект по-прежнему один, а ' ссылок - 2 End Sub ' объект по-прежнему жив. 1 ссылка на уровне модуля Sub УдалениеПоследнейСсылки() tGlobal = Nothing End Sub Обработка событий рождения и смерти Private Sub Class_Initialize() MsgBox "Я новорожденная точка" End Sub Private Sub Class_Terminate() MsgBox "Я смертельно раненая точка" + _ vbNewLine + "капут!" End Sub Программирование на VBA с использованием объектов Лекция 3. 2.12.04 Оператор With With составное_значение Оператор1 .Свойство .Метод-процедура параметры перем = Метод–функция(параметры) End with вместо: Оператор1 составное_значение .Свойство составное_значение .Метод-процедура параметры перем = составное_значение.Метод– функция(параметры)