Лекция 18н Программирование на языке VBA

advertisement
Лекция 16: Программирование на языке VBA
Вопрос 1. Объекты и семейства VBA
Язык VBA является объектно-ориентированным языком программирования.
Стандартные объекты VВА представляют собой основные средства манипуляции с
данными Microsoft Access и других приложений семейства Microsoft Office. Знание
технологии объектно-ориентированного программирования и состава объектных
моделей VBA позволяет разрабатывать профессиональные приложения, выполняющие
всю необходимую обработку данных.
Объект — абстракция, которой оперирует в объектно-ориентированных языках
программирования. Объект обладает собственными характерными признаками,
отличающими его от ДРУГИХ объектов: кроме того, объект имеет свое поведение.
Класс - описание совокупности однотипных объектов. Класс можно сравнить с типом
данных, где переменной является объект. В этом случае говорят, что объект представляет
собой экземпляр определенного класса.
Метод — отдельная характеристика объекта или класса. Свойство объекта может
принимать определенное значение.
Метод — процедура (или функция) объекта или класса. У объекта или класса может
быть определенное количество методов и свойств. Методы определяют поведение
объекта. В объектно-ориентированных языках программирования поведение
приложения определяется поведением созданных в нем объектов.
Объект может реагировать на определенное событие (event), происходящее в
процессе работы приложения и влияющее на объект. Совокупность событий, на которые
объект способен реагировать, определяется создателем класса, экземпляром которого
является данный объект. Реакцией объекта на произошедшее событие может быть
выполнение им некоторых заданных действий — специальной процедуры, которая
называется процедурой обработки события. Любому событию объекта может быть
назначена некоторая процедура его обработки.
Семейство (collection) — упорядоченный набор однотипных объектов, т.е.
экземпляров одного класса. Семейство тоже является объектом, и одним из методов
этого объекта является процедура, возвращающая ссылку на конкретный объект в
семействе. Одним из свойств семейства является число объектов, хранящихся в нем.
Объектная модель (object model) — совокупность взаимосвязанных объектов,
описывающих программную систему.
В VBA определены специальные объектные модели для каждого компонента
семейства Microsoft Office и объектные модели, общие для всех компонентов Microsoft
Office. С помощью объектных моделей, определенных в VВА осуществляется управление
приложениями Microsoft Office.
В базе данных Microsoft Access могут храниться такие объекты, как таблицы, запросы,
формы, отчеты, макросы и модули, а также ссылки на объекты — страницы доступа к
данным. В проекте Microsoft Access могут храниться такие объекты, как формы, отчеты,
макросы и модули, ссылки на страницы доступа к данным, а также ссылки на объекты,
хранящиеся в базе данных на SQL-сервере (таблицы, представления, диаграммы базы
данных и хранимые процедуры). Страница доступа к данным представляет собой Webстраницу, хранящуюся отдельно от БД или проекта Microsoft Access . В базе данных или
проекте хранится только ссылка на страницу доступа к данным в виде ярлыка (подобного
ярлыку файла Windows). Доступ к объектам, хранящимся в приложении Microsoft Access,
осуществляется с помощью окна базы данных или проекта.
К постоянным объектам (содержащимся в базе данных или проекте Access)
относятся подчиненные объекты, например элементы управления в форме, отчете, на
странице доступа к данным. Кроме постоянных объектов бывают временные объекты, т.е.
объекты ВА, которые существуют только в период времени выполнения приложения.
Создание объектов в Microsoft Access осуществляется интерактивно или программно.
Чтобы изменить свойства объекта, достаточно щелкнуть правой кнопкой мыши по
нему; (например, по таблице в окне базы данных или проекта Access и выбрать в
контекстном меню команду Свойства (Properties). Появится окно свойств объекта,
представленное на рис.16.1.
Рис. 16.1. Окно свойств объекта приложения Access
Окно свойств объекта элемента управления тоже открывается с помощью команды
контекстного Свойства. Чтобы отобразить контекстное меню элемента управления,
достаточно открыть форму (отчет или страницу доступа к данным) в режиме
конструктора и щелкнуть правой кнопкой мыши по элементу управления.
Другие свойства объектов можно изменить только программно, т.е. с помощью
макроса или процедуры VBA.
Программный доступ к постоянным (хранимым в приложении Access) и временным
объектам (осуществляется с помощью объектных моделей VBA.
Объектная модель Microsoft Access реализована в виде набора объектов собранных в
библиотеке Access (рис.). Основным элементом в иерархии объектов библиотеки Access
является объект Application, который содержит ссылки на все объекты и семейства
объектов Microsoft Access. Каждый объект из библиотеки Access имеет в качестве свойства
объект Application, который ссылается на активное приложение Microsoft Access.
Каждый объект может содержать набор свойств, часть из которых может являться
ссылками на другие объекты.
Рис. 16.2. Окно просмотра объектов
В каждый новый уровень иерархии входят объекты, ссылки на которые хранятся в
объектах, расположенных на предыдущем уровне.
Если свойство объекта представляет собой ссылку на объект, определенный в другой
библиотеке (не в библиотеке Access), для него приводится название этой библиотеки.
Для доступа к некоторым объектам можно использовать сокращенную ссылку,
содержащую только имя объекта. Дело в том, что определенные объекты, свойства и
методы считаются глобальными. Ссылки на них хранятся в специальном объекте с
именем Global. Узнать, какие свойства и методы являются глобальными, позволяет окно
просмотра объектов (рис. 16.2). Чтобы отобразить список глобальных компонентов
объектной модели, следует выбрать элемент globals в списке Classes в окне просмотра
объектов.
Например, объект DoCmd является глобальным. Для доступа к нему можно
использовать сокращенную ссылку вида DoCmd вместо полной ссылки вида Application.
DoCmd
В табл. 16.1 приведено описание объектов Microsoft Access, определенных в
библиотеке Access (если не указана другая библиотека объектов).
В Microsoft Access 97 для программного доступа к базе данных используется объект
Database из библиотеки ОАО (объекты доступа к данным). Ссылку на этот объект
возвращают, например, методы CurrentDb и CodeDb объекта Application, отличающиеся
друг от друга. Первый метод возвращает ссылку на объект Database, который
представляет собой текущую базу данных Microsoft Access, а второй метод возвращает
ссылку на объект Database, представляющий собой ту базу данных, в которой
выполняется код VBA, содержащий вызов метода CodeDb. Метод CodeDb целесообразно
ис пользовать в процедурах библиотек Access, так как вызовом такой процедуры можно
получить доступ к библиотечной базе данных.
В Microsoft Access 2000 у объекта Application появились новые свойства: CurrentProject,
CurrentData, CodeProject и CodeData, позволяющие манипулировать объектами базы
данных. Теперь вместо объекта Database из библиотеки DAO для работы с базой данных
или проектом Access можно использовать объекты CurrentProject^ CurrentData,
CodeProject и CodeData из библиотеки Access.
Пары объектов CurrentProject, CodeProject и CurrentData, CodeData имеют одинаковые
свойства и методы. Отличие объектов CurrentProject и CurrentData от CodeProject и
CodeData подобно отличию друг от друга объектов, возвращаемых методами CurrentDb и
CodeDb. Объекты CurrentProject и CurrentData соответствуют текущей базе данных, а
объекты CodeProject и CodeData — базе данных, в которой выполняется (и содержится)
код VBA, содержащий ссылки на эти объекты.
Таблица 16.1
Описание составляющих объектной модели
Microsoft Access
Объект
Тип
Application
Объект
Описание
Ссылается на активное приложение Microsoft Access. Используется
для управления приложением. Этот объект является СОМкомпонентом и -может быть использован другим приложением,
которое поддерживает Automation
Forms
Семейство
Содержит объекты Form, соответствующие всем открытым в
данный момент формам в БД Access
Form
Объект
Ссылается на конкретную форму Access, описывает свойства
формы, элементы управления и модуль, содержащий процедуры
формы. Каждый объект Form содержит в качестве свойства по
умолчанию семейство Controls, представляющее собой элементы
управления данной формы. Следовательно, доступ к элементам
управления формы может осуществляться двумя способами — явно
(как к элементу семейства Controls) и неявно (как к элемент)
объекта Form):
1. Forms!Заказы.Соntrols!НомерЗаказа
Reports
Семейство
Report
Объект
Modules
Семейство
Module
Объект
References
Семейство
Reference
Объект
DataAccessPages Новое
2. Forms!Заказы!НомерЗаказа
Содержит объекты Report, соответствующие всем открытым в
данный момент отчетам в БД Access
Ссылается на конкретный отчет Access, описывает свойства отчета,
элементы управления и модуль, содержащий процедуры отчета.
Доступ к элементам управления отчета осуществляется с помощью
семейства Controls (свойства по умолчанию) двумя способами —
явно и неявно.
Содержит объекты Module, соответствующие всем открытым в данный
момент стандартным модулям и модулям объектов в БД Access
Ссылается на конкретный стандартный модуль или модуль класса Access, описывает содержимое модуля в строках кода.
Приложение Microsoft Access кроме стандартных модулей, не привязанных к объектам, модулей форм и отчетов, привязанных соответственно к форме или отчету, может иметь модули классов, не зависящие
от других объектов приложения и определяющие новый класс. Тип
модуля
можно
узнать
с помощью
свойства Туресобой установленные
Содержит
объекты
Reference,
представляющие
ссылки в приложении Access. С помощью данного семейства в приложении можно динамически устанавливать или удалять ссылки на
внешние библиотеки
Соответствует ссылке, установленной на библиотеку объектов или
типов, содержит информацию о ссылке, включающую в себя имя
библиотеки и путь к соответствующему файлу
Содержит объекты DataAccessPages,
соответствующие открытым в данный момент страницам доступа к
данным в БД или проекте Access
семейство
DataAccessPage Новый
объект
Ссылается на конкретные страницу доступа к данным Access. Описывает свойства страницы
Screen
Объект
Ссылается на конкретные форму, отчет или элемент управления, которые в данный момент имеют фокус
DoCmd
Объект
Позволяет выполнить макрос или встроенную инструкцию Access с
помощью процедуры на VBA
Предоставляет доступ к функциональным средствам нового редактора
VBE
Новый объект
из библиотеки
VBIDE
DefaultWebOptions Новый
объект
Предоставляет доступ к атрибутам приложения, используемым в Access по умолчанию при открытии и сохранении Web-страниц
WebOptions
Предоставляет доступ к атрибутам конкретной страницы доступа к
данным, используемым в Access при открытии и сохранении Webстраниц. Эти атрибуты имеют более высокий приоритет, чем соответствующие атрибуты приложения. Если установлены атрибуты страницы доступа к данным, то соответствующие атрибуты приложения для
работы с Web-страницами игнорируются.
Новый
объект
Если атрибуты страницы доступа к данным изменяются, то автоматически такие же значения получают атрибуты приложения. Следовательно, полезно сохранять текущие атрибуты приложения, чтобы
восстанавливать их после изменения атрибутов страницы доступа к
данным
DBEngine
CurrentProject
CurrentProject
Объект из
библиотек
и
DAO
Является объектом самого верхнего уровня в объектной модели DAO.
Новый
объект
Ссылается на программный проект (представляющий собой совокупность всех программных модулей, включая стандартные модули и модули классов) текущей базы данных или проекта Microsoft Access.
Новый объект
Этот объект содержит семейства объектов AccessObjects, соответствующих реальным объектам базы данных или проекта: AllForms,
AUReports, AUMacros, AllModules, AllDataAccessPages. Перечисленные
семейства содержат все реальные объекты БД независимо от того,
открыты они или закрыты в данный момент
Позволяет использовать объекты доступа к данным в приложении
Access
CurrentData
Новый объект
Ссылается на объекты, сохраненные приложением — источником
данных (ядром Jet или SQL-сервером) в текущей базе данных.
Содержит семейства объектов AccessObject: AllTables, AllQueries,
AllViews, AllSto-redProcedures, AllDatabaseDiagrams. Перечисленные
семейства содержат все реальные объекты БД, независимо от того,
открыты они или закрыты в данный момент
CodeData
Новый объект
Controls
Семейство
AllTables, AllQueries, AllViews, AllStoredProcedures, AllDatabase-Diagrams.
Перечисленные семейства содержат все реальные объекты базы данных
независимо от того, открыты они или закрыты в данный момент
Содержит объекты Control, представляющие собой все элементы
управления в конкретных форме, отчете или секции. Это семейство
является свойством объектов Form, Report, Section и Control
Control
Объект
Format Conditions Новое
семейство
Format Condition
Новый объект
All Forms
Новое
семейство
AllReports
Новое
семейство
AllDataAccessPag Новое
es
семейство
Представляет собой любой конкретный элемент управления в форме,
отчете или секции. Может ссылаться на один из объектов, характеризующих элемент управления определенного типа: CheckBox, TextBox, Combo
Box, Command Button, CustomControl, BoundObjectFrame, Image, ListBox,
ObjectFrame, OptionButton, Option-Group, Page, Section, SubForm,
TogleButton
Содержит объекты FormatCondition и представляет собой набор форматов по
условию для объектов Text-Box и ComboBox
Представляет собой форматирование по условию, определенное для
элемента управления типа поле ввода (объект TextBox) или список с полем
ввода (объект ComboBox)
Содержит объекты AccessObject и представляет собой все формы в объектах
CurrentProject и Code Project
Содержит объекты AccessObject и представляет собой все отчеты в объектах
CurrentProject и CodeProject
доступа к данным в объектах Cur-rentProject и CodeProject
All Macros
Новое
семейство
Содержит объекты AccessObject и представляет собой все макросы в
объектах CurrentProject и CodeProject
All Modules
Новое
семейство
Содержит объекты AccessObject и представляет собой все профаммные модули в объектах Current-Project и CodeProject
AllTables
Новое
Содержит объекты AccessObject и представляет собой все таблицы в
объектах CurrentData и Code Data
семейство
AllQueries
Новое
семейство
All Views
Новое
семейство
Содержит объекты AccessObject и представляет собой все запросы в
объектах CurrentData и Code Data. При этом количество запросов в
проекте Access должно равняться нулю
Содержит объекты AccessObject и характеризует все представления в
объектах CurrentData и Code Data. При этом количество представлений в базе данных Access должно равняться нулю
AllStoredProcedu Новое
res
семейство
AllDatabaseDiagr Новое
ams
семейство
AccessObject
Новый
объект
AccessObject
Новый
объект
AccessObjectPro- Новое
perty
семейство
Содержит объекты AccessObject и представляет собой все хранимые
процедуры в объектах CurrentData и Code Data. При этом количество
хранимых процедур в базе данных Access должно равняться нулю
Содержит объекты AccessObject и представляет собой все схемы базы
данных в объектах CurrentData и CodeData. При этом количество схем
базы данных в БД Access должно равняться нулю
Ссылается на реальный объект Wicrosoft Access в любом из следуюцих
семейств: AllForms, AllReports, \llMacros, AllModules, AllDataAccessPages, AllTables.
AllViews, All Stored Procedures, All-DatabaseDiagrams. В зависимости от
того, к какому семейству он принадлежит, представляет собой любой
из объектов Access — таблицу (Table), запрос (Query), отчет (Report),
форму (From), модуль (Module), макрос (Macro), страницу доступа к
данным
(Dataaccess
page), объекты
представление (View), хранимую процедуру
Содержит
настраиваемые
(Stored procedure) или схему базы данных (Database diagram).
семейства AccessObjectProperty, описывающие свойства и однозначно
Объект
AccessObject
ссылается объекты:
на существующий
объект
базы данных.
характеризующие
конкретные
AccessObject,
Code-Data,
При этом нельзя
создать или
новый
или удалить существующий объект
CodeProject,
CurrentData
CurrentProject
AccessObject
Download