Программирование на VBA с использованием объектов

advertisement
Программирование на 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
составное_значение .Свойство
составное_значение .Метод-процедура
параметры
перем =
составное_значение.Метод–
функция(параметры)
Download