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



Проверить аттестат

Мы принимаем Яндекс.Деньги

«VBA Использование объектов, их свойства и методы. Формы. Объектная модель FSO»

Файл: 4 КБ
Поделиться:
Работа с объектами
При создании приложения в VBA в основном происходит работа с объектами. Можно использовать объекты, предоставляемые VBA: элементы управления, формы и объекты доступа к данным. Можно также управлять объектами других приложений из приложения VBA. Можно даже создавать свои собственные объекты и определять для них дополнительные свойства и методы.
Что такое объект?
Объект - это комбинация кода и данных, которую можно рассматривать как одно целое. Объект может быть частью приложения, как элемент управления или форма. Целое приложение также может быть объектом. В таблице приведены примеры типов объектов, которые можно использовать в VBA:
Объект Описание
Кнопка управления Элементы управления на форме, например кнопки управления и рамки, являются объектами
Форма Каждая форма в проекте VBA является отдельным объектом
База данных Базы данных являются объектами и содержат другие объекты, например, поля и индексы
Диаграмма Диаграмма в Microsoft Excel является объектом
Происхождение объектов
Каждый объект в VBA определен классом (class). Класс используется для создания объектов и определяет их характеристики. Приведем два примера взаимоотношений между классами и объектами в VBA:
 Элементы управления Панели элементов управления в VBA представляют классы. Объект, известный как элемент управления, не существует, пока он не нарисован на форме. Когда создается элемент управления, создается копия, или экземпляр (instance) класса элемента управления
 Форма, используемая во время разработки, является классом. Во время выполнения VBA создает экземпляр класса формы
Окно Properties (Свойства) отображает класс и свойство Name (Имя) объектов в разработанном приложении VBA.
Все объекты создаются как идентичные копии своих классов. Свойства индивидуальных объектов можно изменять. Например, если на форме созданы три кнопки управления, каждый объект кнопка управления является экземпляром класса ConroandButton. Объекты одного класса используют общий набор характеристик и способностей (свойств, методов и событий). Каждому объекту дано свое имя, их можно по отдельности заблокировать и разблокировать, поместить в разные места на форме и т. д.
Понятие "класс объекта" не часто упоминается. Просто надо помнить, что, например, термин "элемент управления списком" означает "экземпляр класса ListBox".
Что можно делать с объектами?
Объект предоставляет в распоряжение разработчика готовый исполняемый код. Например, вместо того чтобы программировать собственные диалоги File Open (Открыть файл) и File Save (Сохранить файл), можно использовать элемент управления общим диалогом (объект, предоставляемый VBA). Можно написать собственный код управления планированием и ресурсами, но вместо этого проще использовать объекты Calendar (Календарь), Resources (Ресурсы) и Task (Задача), предоставляемые Microsoft Project (Проект).
VBA может комбинировать объекты из других источников
VBA предоставляет инструменты, которые позволяют комбинировать объекты из различных источников. Можно строить решения, комбинируя самые мощные возможности VBA и приложений, поддерживающих Automation (Автоматизация) (ранее известная как OLE Automation). Автоматизация (automation) - это свойство составной модели объекта (Component Object Model, СОМ), промышленного стандарта, используемого приложениями для раскрытия своих объектов инструментам разработки и другим приложениям.
Можно строить приложения, объединяя внутренние элементы управления VBA и объекты, предоставляемые другими приложениями. Предположим, что эти объекты помещены на форму VBA:
 Объект Microsoft Excel chart (Диаграмма Microsoft Excel)
 Объект Microsoft Excel Worksheet (Рабочий лист Microsoft Excel)
 Объект Microsoft Word Document (Документ Microsoft Word)
Эти объекты можно использовать для создания приложения. Это сохранит время разработчика, так как не надо писать код, воспроизводящий все функциональные возможности объектов Microsoft Excel и Microsoft Word.
Основы работы с объектами
Объекты VBA поддерживают свойства, методы и события. В VBA данные объекта (установки или атрибуты) называются свойствами, тогда как процедуры, которые оперируют с объектом, называются его методами. Событие - это действие, распознаваемое объектом, например, щелчок кнопкой мыши или нажатие клавиши клавиатуры, и программист может написать код, реагирующий на это событие.
Можно изменять характеристики объекта, меняя его свойства. Рассмотрим радио: одно из свойств радио - громкость (volume). В терминах обсуждаемой темы можно сказать, что радио обладает свойством "Volume", которое регулируется изменением его значения. Предположим, что можно установить регулятор громкости радио в положения от 0 до 10. Если бы радио управлялось с помощью VBA, можно было бы написать код процедуры, которая изменяла бы значение свойства "Volume" от 3 до 5, чтобы радио работало громче:
Radio.Volume = 5
Кроме свойств объекты обладают методами. Методы - это такая же часть объектов, как и свойства. В целом, методы - это действия, которые можно выполнить, тогда как свойства - это атрибуты, которые устанавливаются или восстанавливаются. Например, чтобы позвонить по телефону, надо набрать номер (dial). Можно было бы сказать, что телефоны обладают методом "Dial", и использовать этот синтаксис для набора номера 555111:
Phone.Dial 5551111
Объекты также обладают событиями. События инициируются, когда изменяются некоторые свойства объекта. Например, радио может иметь событие "VolumeChange" (Изменение громкости). Телефон может иметь событие "Ring"(Звонок).
Управление объектами с помощью свойств
Индивидуальные свойства меняются. Некоторые можно установить во время разработки. Для этого лучше использовать окно Properties (Свойств), что позволяет вообще не писать никакого кода. Другие свойства не доступны во время разработки, следовательно, необходимо программировать установку таких свойств во время выполнения.
Свойства, которые можно установить или значения которых можно получить только во время выполнения, называются изменяемыми (read-write properties). Свойства, значения которых можно только прочитать во время выполнения, называются неизменяемыми (read-only properties).
Установка значений свойств
Значение свойства устанавливается, только если необходимо изменить внешний вид или поведение объекта. Например, свойство Text элемента управления TextBox изменяют, если необходимо изменить содержимое поля.
Для установки значения свойства применяется следующий синтаксис:
object.property = expression
Следующие операторы демонстрируют, как можно устанавливать значения свойств:
Textl.Top = 200 ' Значение свойства Тор равно 200 твипам.
Textl.Visible = True ' Отображает текстовое поле.
Textl.Text = "hello" ' Отображает 'hello' в текстовом поле.
Получение значений свойств
Получают значение свойства тогда, когда хотят определить состояние объекта до выполнения каких-либо действий из кода, например, присвоить значение свойству другого объекта. Можно проанализировать содержимое текстового поля (значение свойства Text этого элемента управления) перед выполнением кода, который может изменить это значение.
В большинстве случаев, чтобы получить значение свойства, применяется следующий синтаксис:
variable = object.property
Можно также использовать значение свойства, как часть более сложных выражений, без присваивания этого значения переменной. В следующем примере значение свойства Top (Верх) нового члена массива элементов управления вычисляется как значение свойства Top предыдущего члена плюс 400:
Private Sub cmdAdd_Click()
' [операторы]
optButton(n).Top = optButton(n-l).Top + 400
' [операторы] End Sub
Примечание
В случае многократного использования значения свойства код будет выполняться быстрее, если хранить это значение в переменной.
Использование методов в коде
Методы могут воздействовать на значения свойств. Например, в аналоге радио метод SetVolume (Установить громкость) изменяет свойство volume (громкость). Списки VBA имеют свойство List (Список), которое можно изменить методами clear (Очистить) и Additem (Добавить элемент).
При использовании метода в коде запись соответствующего оператора зависит от того, сколько параметров требуется передать в метод, и возвращает ли метод значение. Если методу не требуются параметры, его можно вызвать с помощью следующего синтаксиса:
object.теthod.
В следующем примере метод Refresh (Освежить) перерисовывает картинку:
Picturel.Refresh ' Перерисовка элемента управления.
Некоторые методы, как метод Refresh, не имеют параметров и не возвращают значения.
Если методу требуется более одного параметра, они отделяются друг от друга запятыми. Например, метод circle (Круг) требует задать положение, радиус и цвет круга на форме:
' Нарисовать голубой круг радиусом 1200 твипов.
Forml.Circle (1600, 1800), 1200, vbBlue
Если необходимо сохранить возвращаемое методом значение, следует заключить в круглые скобки его параметры. Например, метод GetData (Получить данные) возвращает картинку из буфера обмена (clipboard):
Picture = Clipboard.GetData (vbCFBitmap)
Если метод не возвращает никакого значения, параметры задаются без круглых скобок. Например, метод Additem (Добавить элемент) не возвращает значения:
Listi.Additem "yourname" ' Добавить текст 'yourname' в список.
Взаимосвязь объектов
Если на форму помещаются две кнопки управления, они являются отдельными объектами с различными значениями свойства Name (Имя) (command1 и Command2), НО ОНИ СОВМССТНО ИСПОЛЬЗУЮТ ОДИН И ТОТ ЖЕ КЛАСС: CommandButton.
Кроме того, они расположены на одной форме. Но рассмотренный выше в этой главе элемент управления также принадлежит этой форме. Это выстраивает элементы управления в некоторую иерархию. Чтобы сослаться на элемент управления, сначала нужно сослаться на форму, точно так же необходимо набрать код страны или код области, прежде чем набирать конкретный номер телефона.
Рассматриваемые кнопки управления также являются элементами управления - это их общая характеристика. Все элементы управления имеют общие характеристики, что отличает их от форм и других объектов в окружении VBA. Далее будет рассматриваться использование наборов VBA для объединения родственных объектов в группы.
Иерархия объектов
Иерархия объектов (object hierarchy) определяет, как объекты связаны друг с другом и как к ним можно обратиться. В большинстве случаев программисту нет необходимости заботиться об иерархии объектов VBA, однако:
 При обращении к объектам других приложений следует знать иерархию объектов этого приложения.
 Работая с объектами доступа к данным, следует знать иерархию Data Access Objects (Объектов доступа к данным)
Наборы объектов
Наборы объектов имеют собственные свойства и методы. Объекты в наборе называются членами набора (members of the collection). Все члены набора перенумерованы последовательно, начиная с 0. Номер члена в этой последовательности называется его индексом (index number). Например, набор Controls (Элементы управления) состоит из всех элементов управления на заданной форме, как показано на рис. 5.10. Наборы применяются для упрощения кода, если необходимо выполнить одну и ту же операцию над всеми объектами в наборе.
Например, следующий код последовательно просматривает набор controls и заносит имя члена в список:
Dim MyControl as Control For Each MyControl In Forml.Controls
' Имя каждого элемента управления заносится в список.
Listl.AddItem MyControl.Name Next MyControl
Применение свойств и методов к членам наборов
Существует два общих способа адресации члена набора:
" Задать имя члена. Следующие выражения эквивалентны:
Controls("List1") Controls!List1
 Использовать индекс члена:
Controls(3)
Коль скоро имеется возможность адресации ко всем членам сразу и к индивидуальным членам, применять свойства и методы можно следующим образом:
' Установить значение свойства Тор списка равным 200.
Controls! List1. Top = 200
или так:
Dim MyControl as Control
For Each MyControl In Form1.Controls ()
' Установить значение свойства Top каждого члена равным 200.
MyControl.Top = 200
Next MyControl
Объекты, содержащие другие объекты
В VBA некоторые объекты содержат другие объекты. Например, обычно форма содержит один или более элементов управления. Удобство использования объектов в качестве контейнеров (containers) для других объектов заключается в том, что можно ссылаться на контейнер в коде для уточнения, какой объект используется. Например, могут быть две разные формы. Обе формы могут иметь списки с именем istAcctNo. Для точного указания списка можно использовать ссылку на форму, содержащую этот список:
frmReceivable.IstAcctNo.AddItem 1201
или
frmPayable.IstAcctNo.AddItem 1201
Общие наборы в VBA
В VBA существуют некоторые общие случаи, когда один объект содержит другие объекты. В таблице кратко описаны наиболее часто используемые наборы VBA.
Формы.
Первым шагом при разработке приложения на VBA является создание интерфейса, видимой части приложения, с которым взаимодействует пользователь. Формы и элементы управления как раз и являются строительными блоками при создании интерфейса. Именно с этими объектами приходится работать при построении приложений.
Формы - это объекты, которые обладают свойствами, определяющими их внешний вид, методами, определяющими их поведение, и событиями, которые определяют их взаимодействие с пользователем. Установкой свойств формы и разработкой кода VBA для отклика формы на события создается объект, удовлетворяющий требованиям определенного приложения.
Элементы управления - это объекты, содержащиеся внутри объектов-форм. Каждый тип элемента управления имеет свой собственный набор свойств, методов и событий, что делает его пригодным для определенной цели. Некоторые элементы управления, используемые в приложениях, лучше всего подходят для ввода или отображения текста. Другие элементы управления обеспечивают доступ к другим приложениям и данным процессов таким образом, как будто бы удаленное приложение является частью самого приложения.
Данная глава знакомит читателя с основными понятиями, необходимыми для работы с формами и элементами управления и связанными с ними свойствами, методами и событиями. Обсуждается большое количество стандартных элементов управления, а также специфические для форм вопросы: меню и окна диалога.
Разработка формы
Формы являются основными строительными блоками приложения VBA, теми окнами, с которыми взаимодействует пользователь при работе с приложением. У форм есть свои свойства, события и методы, которые позволяют управлять их внешним видом и поведением.
Первым шагом в разработке формы является установка значений ее свойств. Свойства формы можно установить во время разработки в окне Properties (Свойства) или во время выполнения (run time) приложения, написав соответствующий код.
Установка свойств формы
Многие из свойств формы воздействуют на ее внешний вид, т.е. то, как ее видит пользователь. Свойство Caption (Название) определяет текст заголовка окна (title bar) формы. Изменяя установку свойства BorderStyle, можно управлять размерами формы.
Свойства Height (Высота) и Width (Ширина) определяют начальные размеры формы; свойства Left (Левый) и Top (Верхний) определяют местоположение формы по отношению к левому верхнему углу экрана монитора.
Свойство Name (Имя) устанавливает имя, по которому можно обращаться к форме из кода. По умолчанию, когда форма впервые добавляется к проекту, ее имя может быть одним из последовательности имен Form1, Form2 и т. д. Однако для программиста удобнее, если свойство Name будет иметь более выразительное значение, например, frmГлавная для первой формы приложения.
Наилучший путь познакомиться с многочисленными свойствами форм - это поэкспериментировать с ними. Изменить значения некоторых свойств формы в окне Properties, затем запустить приложение и проанализировать воздействие новых значений. Узнать больше о каждом свойстве можно также, выбрав его и нажав F1
События и методы формы
Как объекты, так и формы могут выполнять методы и реагировать (откликаться) на события.
При каждом изменении размера формы в результате действий пользователя или программным способом инициируется событие Resize (Изменить размер) формы. Это позволяет изменять размеры элементов управления на форме или перемещать их, когда изменены размеры самой формы.
Событие Activate (Активизировать) происходит всегда, когда форма становится активной, а событие Deactivate (Деактивировать) - когда активной становится другая форма приложения. Эти события удобны для организации поведения формы при ее инициировании и завершении работы с ней. Например, можно написать код, который в случае события Activate выделит текст в каком-нибудь тeкcтoвoм окне, а в случае события Deactivate внесенные изменения будут сохранены в файле или базе данных.
Чтобы сделать форму видимой, следует вызвать метод show (Показать):
Form2.Show
Вызов метода show имеет тот же эффект, что и установка значения свойства visible (Видимый) формы в True (Истина).
Многие из методов формы работают с текстом или графикой. Методы Print (Печатать), Line (Линия), Сircle (Окружность) и Refresh (Обновить) полезны для печати или рисования непосредственно на поверхности формы.
Свойство Container
Свойство container (Набор) используется для изменения набора объектов внутри формы. Следующие элементы управления могут содержать другие элементы управления:
 Рамка
 Графическое окно
Следующий пример демонстрирует перемещение кнопки управления из одного набора на форме в другой. Откроем новый проект и создадим на форме рамку, графическое окно и кнопку управления.
Следующий код в процедуре обработки события click (Щелчок) формы увеличивает переменную цикла и использует конструкцию select case для поочередного перемещения кнопки управления из контейнера в контейнер:
Private Sub Form_Click() 
Static intX as Integer 
Select Case intX
Case 0
Set Command1.Container = Picture1
Command1.Top= 0
Command1.Left= 0
Case 1
Set Coinmand1. Container = Frame1 
Command1.Top= 0 
Command1.Left= 0
Case 2
Set Command1.Container = Form1 
Conmiand1. Top= 0 
Commandl.Left= 0
End Select 
intX = intX + 1 
End Sub
Связь между объектами
Кроме использования и создания объектов в VBA можно организовать коммуникационную связь с другими приложениями и управлять их объектами из разрабатываемого приложения. Возможность совместного использования данных приложениями - одна из ключевых в операционной системе Windows. VBA предоставляет большую гибкость при организации взаимодействия с другими приложениями.
Создание объектов
Самый простой способ создать объект - щелкнуть два раза на элементе управления в Панели управления. Однако для реализации всех возможностей объектов, доступных в VBA и из других приложений, следует использовать программные возможности VBA для создания объектов во время выполнения:
 Можно создавать ссылки на объект с помощью переменных
 Можно создавать собственные объекты с самого начала с помощью модулей классов
 Можно создавать собственные наборы с помощью объекта collection (Набор.)
Использование переменных для объектов
Переменная может ссылаться на объекты. Присваивание объектов переменным выгодно по тем же причинам, что и присваивание переменным значений:
 Имена переменных, как правило, короче и их легче запомнить, чем значения, которые они содержат (или, как в данном случае, объекты, на которые они ссылаются)
 Во время выполнения кода переменные можно изменять, организуя ссылки на другие объекты
 Ссылка на переменную, содержащую объект, более эффективна, чем постоянная ссылка на сам объект
Использование переменной для объекта аналогично использованию обычной переменной, но с одним дополнительным шагом - присваиванием объекта переменной:
 Сначала ее объявляют:
Dim variable As class
 Затем ей присваивают объект:
Set variable = object
Объявление переменных для объектов
Переменные для объектов объявляют так же, как и другие переменные, с помощью операторов Dim, ReDim, Static, Private или public. Единственное отличие заключается в наличии необязательного ключевого слова New (Новый) и параметра class (класс), они обсуждаются ниже в этой главе. Синтаксис задания переменной для объекта следующий:
(Dim | ReDim | Static | Private | Public} variable As [New] class
Например, можно объявить переменную для объекта, которая ссылается на форму с именем frmMain в приложении:
Dim FormVar As New frmMain ' Объявление объектной переменной типа frmMain.
Можно также объявить переменную, которая может ссылаться на любую форму в приложении:
Dim anyForm As Form ' Переменная родовой формы.
Подобным же образом можно объявить переменную для ссылки на любое текстовое поле в приложении:
Dim anyText As TextBox ' Может ссылаться на любое текстовое поле
Можно объявлять переменные для объекта, которые ссылаются на элемент управления любого вида:
Dim anyControl As Control ' Переменная родового элемента управления.
Заметим, что можно объявлять переменную формы, которая будет ссылаться на конкретные формы в приложении, но нельзя объявить переменную элемента управления, которая будет ссылаться на конкретный элемент управления. Можно объявлять переменные, которые ссылаются на определенный тип элемента управления, например TextBox или ListBox, но не на конкретный элемент данного типа, например txtEntry или Listl. Но можно присвоить определенный элемент управления переменной соответствующего типа. Например, для формы со списком, имеющим имя istSample, можно написать код:
Dim objDemo As ListBox 
Set objDemo = IstSample
Назначение объектов переменным
Назначить или присвоить объект переменной можно оператором Set:
Set variable = object
Этот оператор следует применять, если необходимо, чтобы переменная ссылалась на какой-то объект.
Иногда можно использовать переменные для объектов, иногда переменные для определенного типа элементов управления, просто для того, чтобы сократить размер набираемого кода. Например:
If frmAccountDisplay.txtAccountBalance.Text < 0 Then
FrmAccountDisplay.txtAccountBalance.BackColor = 0 _
FrmAccountDisplay.txtAccountBalance.ForeColor = 255 
End If
Этот код можно значительно сократить, если применить переменную для элемента управления:
Dim Bal As TextBox
Set Bal = frmAccountDisplay.txtAccountBalance
If Bal.Text < 0 Then
Bal.BackColor = 0
Bal.ForeColor = 255 
End If
Типы конкретных и родовых объектов
Переменные для конкретных объектов (specific object variables) должны ссылаться на один конкретный тип объекта или класса. Переменная для конкретной формы может ссылаться только на одну форму в приложении (хотя она может ссылаться на одну форму из множества экземпляров этой формы). Точно так же переменная для конкретного элемента управления может ссылаться только на один конкретный тип элемента управления в приложении, например, TextBox или ListBox. Чтобы посмотреть, как это делается, откроем новый проект и поместим на форму поле ввода. Добавим следующий код к форме:
Private Sub Form_Click()
Dim anyText As TextBox
Set anyText = Textl
anyText.Text = "Hello" 
End Sub
Запустим приложение и щелкнем кнопкой мыши на форме. Свойство Text (Текст) поля ввода изменится на "Hello".
Переменные для родовых объектов (generic object variables) могут ссылаться на один из многих конкретных типов объектов. Переменная для родовой формы, например, может ссылаться на любую форму в приложении; переменная для родового элемента управления может ссылаться на любой элемент управления на любой форме в приложении. Чтобы посмотреть, как это делается, откроем новый проект и поместим несколько элементов управления рамкой, меткой и кнопок управления на форму в произвольном порядке. Добавим следующий код к форме:
Private Sub Form_Click()
Dim anyControl As Control
Set anyControl = Formi.Controls(3)
anyControl.Caption = "Hello" 
End Sub
Запустим приложение и щелкнем кнопкой мыши на форме. Надпись на элементе управления, помещенном на форму третьим, изменится на "Hello".
В VBA существуют три типа родовых объектов:
 Form. Ссылается на любую форму в приложении
 control. Ссылается на любой элемент управления в приложении
 object. Ссылается на любой объект
Переменные для родовых элементов управления полезны, если не известен конкретный тип объекта, на который будет ссылаться переменная во время выполнения. Например, в коде, который будет оперировать с любой формой в приложении, необходимо использовать переменную для родовой формы.
Формы как объекты
Наиболее часто формы используются для создания интерфейса приложения, но они также являются объектами, которые можно вызывать из других модулей приложения. Формы тесно связаны с модулями классов. Главное различие между ними заключается в том, что формы могут быть видимыми объектами, тогда как модули не имеют видимого интерфейса.
Добавление разработанных пользователем методов и свойств
Можно добавлять разработанные методы и свойства к формам и обращаться к ним из других модулей в приложении. Чтобы создать новый метод для формы, следует объявить процедуру с ключевым словом public:
' Пользовательский метод на Form1 
Public Sub LateJobsCountO
. ' <операторы> 
End Sub
Процедуру LateJobsCount можно вызвать из другого модуля оператором:
Form1.LateJobsCount
Создать новое свойство так же просто, как объявить открытую переменную в модуле формы:
Public IDNumber As Integer
Можно устанавливать и возвращать значение свойства IDNumber формы Form1 из других модулей двумя операторами:
Form1.IDNumber = 3 
Textl.Text = Form1.IDNumber
Можно также использовать процедуры property (Свойство) для добавления разработанных свойств к форме.
Примечание
Можно обратиться к переменной, разработанному методу или установить значение разработанного свойства формы без ее загрузки. Это позволяет выполнить код на форме без загрузки ее в память. Точно так же ссылка на элемент управления без ссылки на какое-то из его свойств или методов не загружает форму.
Ключевое слово New
Ключевое слово New применяется для создания нового объекта в соответствии с его определением в своем классе. Его можно применять для создания экземпляров форм, классов, определенных в модулях классов, и наборов.
Использование ключевого слова New с формами
Каждая создаваемая во время разработки форма является классом. С помощью ключевого слова New можно создавать новые экземпляры этого класса. Чтобы увидеть, как это делается, создадим кнопку управления и несколько других элементов управления на форме. В окне Properties присвоим свойству Name формы значение sample. Добавим следующий код в процедуру обработки события click кнопки управления:
Dim x As sample
Set x = New sample
х. Show
Запустим приложение и щелкнем несколько раз кнопкой мыши на кнопке управления. Передвинем первую форму в сторону. Так как форма является классом с видимым интерфейсом, мы увидим дополнительные копии. Каждая форма имеет те же самые элементы управления, что и форма во время разработки.
Примечание
Чтобы сделать форму переменной и сохранять экземпляр загруженной формы, следует использовать переменные Static (Статический) или Public (Открытый) вместо локальных переменных.
Использование ключевого слова New другими объектами
Ключевое слово New используется для создания наборов и объектов классов, определенных в модулях классов. Рассмотрим пример, демонстрирующий создание экземпляров класса с помощью ключевого слова New. Откроем новый проект и создадим кнопку управления на форме Form1. Выполним команду Add Class Module (Добавить модуль класса) меню Project для добавления модуля класса в проект. Установим значение свойства Name модуля класса в showMe.
Следующий код в модуле Form1 создает новый образец класса ShowMe и вызывает процедуру, содержащуюся в модуле класса:
Public cisNew As ShowMe 
Private Sub Commandl Click()
Set cisNew = New ShowMe
cisNew.ShowFrm 
End Sub
Процедура ShowFrm в модуле класса создает новый образец класса sample и показывает ее:
 Sub ShowFrm()
Dim frmNew As sample
Set frmNew = New sample
frmNew.Show
End Sub
Запустим приложение и щелкнем кнопкой мыши несколько раз на кнопке управления. Получаем эффект, как в предыдущем примере, но ключевое слово New использовалось для создания класса.
Ограничения на использование ключевого слова New
С ключевым словом New нельзя:
 Объявлять переменные основного типа данных, например: Dim x As New Integer
 Объявлять переменные любого родового объекта, например: Dim x As New Control
 Объявлять переменные типа для любого конкретного элемента управления, например: Dim X As New ListBox
 Объявлять переменные для любого конкретного элемента управления, например: Dim X As New IstNames.
Освобождение ссылок на объекты
Каждый объект использует память и системные ресурсы. Хорошим стилем программирования является освобождение этих ресурсов, когда объект больше не нужен. Этого можно добиться с помощью:
 Оператора unload (Выгрузить) для выгрузки формы или элемента управления из памяти
 Значения Nothing (Ничего) для освобождения ресурсов, используемых переменной для объекта. Следует присвоить значение Nothing переменной для объекта оператором Set.
Передача объектов в процедуры
В VBA можно передавать объекты в процедуры. В следующем примере предполагается, что на форме существует кнопка управления:
Private Sub Commandl_Click()
' Вызов процедуры Demo sub и передача ей формы.
Demo Form1 
End Sub
Private Sub Demo(x As Formi)
' Прижать вправо.
x.Left = 0
End Sub
Также можно передать объект через параметр по ссылке и затем внутри процедуры установить таким образом, чтобы он ссылался на новый объект. Откроем проект и введем в него вторую форму. Поместим на нее графическое окно. Для свойства Name объекта Form2 необходимо установить значение picture2, а для свойства Picture - имя файла иконки *.ico
Процедура Form1_click обработки события вызывает процедуру GetPicture в форме Form2 и передает ей пустую картинку:
Private Sub Form_Click() 
Form2.GetPicture Picture1
End Sub
Процедура GetPicture в форме Form2 присваивает значение свойства Picture (Картинка) графического окна на форме Form2 пустой картинке на форме Form1:
Private objX As PictureBox Public 
Sub GetPicture(x As PictureBox)
' Присваивает переданное графическое окно объектной переменной.
Set objX = x
' Присваивает значение свойства Picture графическому окну на Formi
objX.Picture = picture2.Picture 
End Sub
Запустим это приложение и щелкнем кнопкой мыши на форме Form1. Увидим значок формы Form2 в графическом окне на форме Form1.
Объектная модель FileSystemObject
Объектная модель FileSystemObject представляет собой не иерархическую структуру объектов (классов), позволяющих получать информацию о файловой системе компьютера и выполнять различные операции с файлами и каталогами этой системы.
Порядок использования объектной модели FileSystemObject, т.е. ее объектов с их свойствами и методами при программировании приложения следующий:
 Подключить к проекту библиотеку типов SCRRUN.DLL. Эта библиотека входит в комплект поставки последних разновидностей Windows95, а все более новые Windows, как 9x, так и NT содержат ее обязательно. Получить эту бибилотеку можно бесплатно на сайте Microsoft http://msdn.microsoft.com/scripting.
 Создать новый объект типа FileSystemObject стандартными методами (посредством New или CreateObject)
 Использовать его методы и свойства для получения необходимой информации, в том числе ссылок на другие (подчиненные) объекты модели. Соответственно, использовать методы и свойства подчиненных объектов модели.
После завершения работы закрыть все использованные объекты, начиная с нижних в иерархии. Там где это необходимо использовать для закрытия объектов их методы, в прочих случаях использовать
Set objvar=Nothing
Объектная модель включает следующие классы
Класс (тип объекта) Назначение
FileSystemObject Обеспечивает доступ к файловой системе компьютера.
Drives Cодержит объекты Drive, каждый из которых ассоциируется ровно с одним диском в файловой системе компьютера, с учетом сети.
Drive Обеспечивает доступ к информации о заданном диске компьютера002E
Folders Семейство Folders содержит объекты Folder, каждый из которых ассоциируется ровно с одним подкаталогом заданного каталога.
Folder Обеспечивает доступ к информации о заданной папке, содержащимся в ней папках и каталогах, а также методы перемещения папки и создания текстового файла.
Files Семейство Files содержит все объекты File, каждый из которых ассоциируется ровно с одним файлом в заданной папке.
File Обеспечивает доступ к информации о заданном файле, методы перемещения файла и открытия текстового файла в режиме последовательного доступа.
TextStream Обеспечивает проведение операций чтения/записи для текстового файла открытого в режиме последовательного доступа.
объект FileSystemObject обеспечивает доступ к файловой системе компьютера. Будучи объектом верхнего уровня объектной модели FileSystemObject является "точкой входа" в файловую систему компьютера. Только после его создания возможен доступ к другим объектам модели, их методам и свойствам.
Dim objFSO As FileSystemObject
Set objFSO = CreateObject("Scripting.FileSystemObject")
или
Set objFSO = New FileSystemObject
Элемент Тип данных Тип данных
objFSO FileSystemObject Идентификатор (имя) объекта FileSystemObject
Свойства объекта FileSystemObject
Свойство Тип данных Чтение/запись Описание
Drives Drives Только чтение Содержит ссылку на семейство Drives, содержащую объекты для каждого устройства дисковой памяти компьютера
Методы объекта FileSystemObject
Метод Назначение
BuildPath Создание строки путем слияния аргументов и добавления между ними, если его нет, разделителя "\" (обратной косой черты).
CopyFile Копирование одного или нескольких файлов из одной папки в другую.
CopyFolder Копирование содержимого папки со всеми содержащимися в ней папками (подкаталогами) в заданное место.
CreateFolder Создание новой папки с заданным именем.
CreateTextFile Создание файла и открытие его в режиме текстового файла последовательного доступа для записи как объекта TextStream
DeleteFile Удаление одного или нескольких заданных файлов.
DeleteFolder Удаление одной или нескольких заданных папок вместе со всем их содержимым.
DriveExists Проверка существования диска с заданным именем на локальной машине или в сети.
FileExists Проверка существования файла с заданным именем на локальной машине или в сети.
FolderExists Проверка существования папки с заданным именем на локальной машине или в сети
GetAbsolutePathName Получение полного имени файла или папки по относительному имени.
GetBaseName Получение поcледнего компонента - имени папки или файла (без расширения) по его полному или относительному имени.
GetDrive Получение ссылки на объект Drive, связанный с заданным диском.
GetDriveName Получение имени диска из имени папки или файла.
GetExtensionName Получение расширения из заданного имени файла.
GetFile Получение ссылки на объект File, связанный с заданным файлом.
GetFileName Получение имени (с расширением) файла из полного имени (пути) файла.
GetFolder Получение ссылки на объект Folder, связанный с заданной папкой.
GetParentFolderName Получение имени папки, являющейся предпоследним компонентом полного имени (пути) файла или папки.
GetSpecialFolder Получение ссылки на объект Folder, связанный с одной из трех специальных папок - папки Windows, системной папки и папки временных файлов.
GetTempName Получение имени для временного файла.
MoveFile Перемещение одного или нескольких файлов из одной папки в другую.
MoveFolder Перемещение содержимого папки со всеми содержащимися в ней папками (подкаталогами) в заданное место.
OpenTextFile Открытие файла как объекта TextStream для проведения операций чтения/записи в режиме последовательного доступа.
У каждого из прочих вышеперечисленных семейств и объектов имеются свои свойства и методы. Для ознакомления с ними следует обратиться к справочной литературе.