Основы работы с модулями классов




Создание приложения на vba путем написания процедур и функций стоит называть процедурным программированием. Написание участков кода, называемых процедурами и функциями, которые описывают какое-либо действие, и последующее последовательное исполнение этих кодов, является основным методом программирования на vba. При этом используется доступ к объектной модели Excel или других приложений. Данные и подпрограммы (функции и процедуры) функционально не связаны между собой. Это значит, что объявляя переменную «длина хвоста» на уровне модуля, нельзя задать ей различные значения для двух процедур. При объектно-ориентированном программировании (ООП) подход иной. Данные и подпрограммы связаны между собой и описываются в классе. Класс – сложный тип данных, в котором описывается структура объекта. Объект – основной строительный материал для написания программ. Отличные представители объектов – форма, лист, книга, диаграмма. Объект, созданный на основе класса, можно называть экземпляром класса. Класс имеет следующую структуру: Поле – элемент класса для хранения данных, Свойство – элемент класса для хранения данных с возможностью их обработки, Метод – аналог процедуры или функции, Событие – сигнал при изменении состояния объекта, например исполнения метода или изменения данных. Из всех принципов ООП в vba реализуемы только два: Абстрагирование и инкапсуляция. Инкапсуляция позволяет скрыть механизм работы класса, оставив открытыми для других процедур только необходимые для работы с экземпляром класса. Абстракция позволяет создать объект, наиболее приближенный к некомпьютерному прототипу. Например, создать объект «Кошка» со свойствами «количество лап» и «цвет хвоста». Создание класса Для создания класса в vba редакторе выберите в меню Insert строку Class Module. Назовите созданный класс путем переименования созданного модуля. В файле с примером он называется ExampleClass. А модуль, демонстрирующий использование этого класса называется ExClassManagement. В свойствах класса, кроме имени так же есть параметр Instancing. Указывается, будет ли виден класс из другой книги при установке ссылки на данную книгу. При установке Private (по умолчанию) класс виден только в данной книге, при установке PublicNotCreatable, класс не будет доступен из другой книги, однако экземпляр класса доступен будет, если он создан в данной книге. Создание экземпляра класса Класс - это всего лишь описание объекта. Для использования возможностей класса, необходимо создать экземпляр класса (объект). Существует несколько способов: Способ 1: view plainprint?
  1. Private Sub TestClass()
  2. Dim cl As ExampleClass
  3. Set cl = New ExampleClass End Sub
Данный способ корректен абсолютно Способ 2: view plainprint?
  1. Dim cl As ExampleClass
  2. Private Sub TestClass()
  3. Set cl = New ExampleClass End Sub
Этот способ отличается от первого способа тем, что экземпляр класса объявляется вне процедуры и работать с ним можно во всех процедурах модуля. При замене Dim на Public экземпляр класса доступен во всем проекте, если объявляется вне объектного модуля. Способ 3: view plainprint?
  1. Dim cl WithEvents As ExampleClass
  2. Private Sub TestClass()
  3. Set cl = New ExampleClass End Sub
Экземпляр класса объявляется с событиями, и если в классе описаны события объекта, они будут доступны. Работает только при объявлении в объектном модуле (модуль класса, формы, листа, книги) Способ 4: view plainprint?
  1. Private Sub TestClass()
  2. Dim cl As New ExampleClass
  3. End Sub
Так называемый неявный метод создания экземпляра класса. В этом случае объект создается при первом обращении к переменной cl. Наверное, предпочтительнее сначала объявлять переменную (выделяется память), а затем явно создавать объект. Уничтожение экземпляра класса Естественно, после использования экземпляра класса, необходимо очистить память. Делается это одним способом: view plainprint?
  1. Set cl = Nothing
Если не деинициализировать экземпляр класс, то ничего глобально страшного происходить в современных офисных пакетах не будет. Но делать это нужно. Создание полей класса Созданный класс ExampleClass не имеет полей, свойств, методов, событий, поэтому и созданный на его основе объект (экземпляр класса) cl, так же бесполезен. Поля это переменные класса, объявленные в его модуле. Поля бывают закрытые и открытые. Доступ к закрытым полям возможен только внутри модуля класса. Открытое поле, по сути – свойство класса, и при создании экземпляра класса оно будет доступно. Создание закрытого поля:   view plainprint?
  1. Dim sBody As String
или view plainprint?
  1. Private sBody As String
  Создание открытого поля:   view plainprint?
  1. Public Head As String
И теперь свойство Head доступно у экземпляра класса cl. В него можно записать view plainprint?
  1. cl.Head = "FHead"
и прочитать view plainprint?
  1. Debug.Print cl.Head
Создать поле с пользовательским типом данных не удастся. Поля используются для хранения данных в объекте. Данные будут доступны, пока объект существует. Однако нельзя указать значение по-умолчанию для поля и нельзя сделать поле только для чтения.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-04-14 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: