Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Создание и удаление объектов




Создание объектов в VBA, раннее и позднее связывание (early/late binding), конструкция CreateObject и ключевое слово New, удаление объектов, ключевое слово Nothing

Создание объекта в VBA может производиться разными способами. Первый, самый простой способ выглядит так:

Dim oApp As Object

Set oApp = CreateObject ("Word.Application")

MsgBox oApp.UserName

Это — так называемое позднее связывание (late binding). Мы вначале объявляем переменную oApp с возможностью ссылаться на любой объект, а затем присваиваем ей ссылку на создаваемый нами объект Word.Application. Такое позднее связывание хуже с точки зрения производительности и расхода оперативной памяти, кроме того, редактор Visual Basic отказывается нам подсказывать, какие свойства и методы есть у этого объекта. Поэтому позднее связывание есть смысл использовать только тогда, когда вы собираетесь хранить в этой переменной, согласно логике вашей программы, объекты разных типов. В остальных ситуациях предпочтительнее использовать раннее связывание (early binding):

Dim oApp As Word.Application

Set oApp = CreateObject("Word.Application")

MsgBox oApp.UserName

В этом случае мы сразу присваиваем переменной oApp тип Word.Application, а потом присваиваем ей ссылку на создаваемый нами объект. Можно обойтись и без второй строки:

Dim oApp As New Word.Application

MsgBox oApp.UserName

Однако ключевое слово New не может использоваться при создании зависимых объектов, с ключевым словом WithEvents и при создании переменных встроенных типов (String, Int и т.п.), поэтому иногда необходимо будет использовать только объявление с Set. Кроме того, в языке VBScript синтаксической конструкции New нет, поэтому если вы собираетесь использовать оба языка, лучше сразу привыкать к конструкции CreateObject().

Еще одна возможность создания объекта — воспользоваться методом другого объекта, который создаст нужный нам объект и возвратит на него ссылку напрямую или через коллекцию:

Dim oApp As New Word.Application

oApp.Documents.Add

Dim oDoc As Word.Document

Set oDoc = oApp.Documents(1)

oDoc.SaveAs "C:\docvba1.doc"

В этом примере мы вначале создаем объект Word.Application, затем при помощи метода Add() коллекции Documents создаем в этой коллекции новый документ, потом получаем на него ссылку для переменной oDoc, а потом вызываем метод SaveAs() созданного нами объекта документа.

Удаление объектов производится очень просто:

Set объектная_переменная = nothing

например,

Set oApp = nothing

В принципе, объект можно и не удалять — он будет удален автоматически после того, как последняя объектная переменная, которая на него ссылается, уйдет за область видимости (обычно это значит, что закончит работу процедура, в которой он используется). Однако явное удаление объектов — это "правило хорошего тона", которое позволит вам при создании серьезных приложений избежать конфликтов имен и перерасхода ресурсов.

Еще один момент, связанный с удалением объектов. Не все объекты можно удалить при помощи синтаксической конструкции Set объектная_переменная = nothing. Некоторые объекты требуют, чтобы их удаляли из памяти специальным способом. Например, объект приложения Word, который мы создавали в нашем примере, хочет, чтобы для его удаления из памяти был обязательно вызван его метод Quit() — иначе он выдаст сообщение об ошибке.

Методы объекта

Методы объектов VBA, способы вызова методов, работа с параметрами

Как правило, объект нам нужен для того, чтобы воспользоваться его методами, свойствами или событиями.

Метод — именованный набор действий, которые может выполнять данный объект. Он может выполнять какие-либо операции, принимать и возвращать значения. Существует три способа вызова метода:

· Самый простой способ выглядит так:

Объект.метод

например:

oDoc.Activate

При этом не возвращаются и не принимаются никакие параметры.

Второй способ:

объект.метод параметр1 [, параметр2, …, параметр]

Параметры передаются путем перечисления через запятую, скобки не используются. Например:

oDoc.SaveAs "D:\doc12.doc"

в этом случае мы игнорируем то, что возвращает метод и поэтому кавычки не нужны.

Третий способ:

моя_переменная = объект.метод (параметр1 [, параметр2, …, параметр n ])

например,

Dim nCent

nCent = oApp.CentimetersToPoints(10)

MsgBox nCent

В этом случае значение, которое возвращает метод, присваивается переменной. При этом применение скобок для передаваемых параметров обязательно. Даже если никакие параметры не передаются, круглые скобки все равно обязательны:

моя_переменная = объект.метод()

Свойства объекта

Свойства объектов VBA, присвоение значений свойствам, типы свойств

Свойства объекта — это возможность получения доступа к информации, которая хранится в этом объекте. Через свойства можно получить эту информацию или ее изменить.

Извлечь информацию можно при помощи синтаксиса вида

Переменная = Объект.Свойство

например,

sName = oApp.UserName

Изменить информацию в объекте при помощи свойства можно так:

Объект.Свойство = Значение

например:

o App.ActivePrinter = "HP LaserJet 4"

Значение может быть обычной константой (10 или "HP LaserJet 4"), простым выражением (10 + 5), свойством другого объекта (Объект1.Свойство = Объект2.Свойство), возвращаемым значением какого либо метода: Объект.Свойство = Объект2.Метод().

Конечно, значения не всех свойств можно изменять. Некоторые свойства доступны только для чтения, другие — для чтения и записи, третьи (очень редко) — только для записи.

4.5 События объекта и объявление WithEvents

События объектов VBA, объявление WithEvents

Событие — это действие, распознаваемое объектом, для которого можно запрограммировать отклик. Например, в качестве события можно использовать открытие или закрытие документа, щелчок мыши, нажатие клавиши. События запрятаны вглубь объектов и настоятельно рекомендуется их использовать уже рассмотренным нами способом — через выбор нужного объекта и его события в окне редактора кода Visual Basic. Однако в некоторых ситуациях события для объектов не появляются в окне редактора кода (например, это справедливо для очень важного объекта Application). В этом случае необходимо явно объявить этот объект с событиями — при помощи ключевого слова WithEvents, например так:

Public WithEvents App As Word.Application

Делается это в области объявлений модуля (Declarations). После этого в редакторе кода Visual Basic появляется новый объект App со всеми необходимыми событиями.

Подробно работу с событиями мы рассмотрим в другом разделе, который будет посвящен работе с формами и графическими элементами управления — кнопками, флажками, переключателями и т.п. Нам достаточно выбрать в списке объектов (левый верхний список в окне редактора кода) нужный графический элемент, затем в списке событий (справа от списка объектов) выбрать нужное нам событие — и в редакторе кода будет автоматически создана специальная событийная процедура. Код, который в нее впишете, будет автоматически выполнен при наступлении этого события (например, при щелчке мышью по кнопке на форме).

Просмотр объектов

Просмотр библиотек классов VBA, применение Object Browser

Элементарные знания о том, как создавать объекты и использовать их свойства, методы и события, у нас уже есть. Однако может возникнуть вопрос: а как найти нужный объект и как определить, какие свойства, методы и события в нем имеются?

Основной инструмент для этой цели — Object Browser, утилита, которая интегрирована в редактор кода VBA. Чтобы им воспользоваться, необходимо в окне редактора кода нажать на кнопку <F2> и выбрать нужную библиотеку классов. Классы показываются как прямоугольники с разноцветными "кирпичиками", методы — как летящий зеленый предмет, свойства — как надпись, на которую указывает рука, события — значок молнии. Свои значки (не берусь их описывать) предусмотрены для модулей и перечислений. Если нужно просмотреть библиотеку типов, которой еще нет в списке Object Browser, необходимо добавить ссылку на нее через меню Tools -> References или пункт References в контекстном меню самого Object Browser. Однако необходимо учесть:

· для полноценной работы с Object Browser необходимо разбираться в объектно-ориентированном программировании. Например, если мы просмотрим класс CommandButton из библиотеки MSForms (то есть класс кнопки на форме), то увидим там далеко не все его свойства, методы и события. Причина в том, что многие свойства, методы и события этот класс наследует от класса Control — общего прародителя большинства элементов управления VBA;

· при помощи Object Browser вы сможете узнать только названия методов, свойств и событий и получить информацию о принимаемых параметрах и возвращаемых значениях. Получить информацию о том, что делает данный метод, что возвращает свойство, когда срабатывает событие, при помощи Object Browser нельзя (иногда можно догадаться по названию). Эту информацию можно найти только в справке по данной библиотеке классов.

Объектные модели

Встроенные объектные модели Windows, объектные модели Windows Script Host (WSH), Scripting Runtime, ADO, SQLDMO, CDO, WMI, ADSI, Windows Explorer, Internet Explorer

Наборы объектов, которые предназначены для выполнения задач, относящихся к одной области, называются объектными моделями. Например, в объектной модели Excel предусмотрены объекты, представляющие само приложение Excel, рабочую книгу, отдельные листы на этой рабочей книге, наборы ячеек, диаграммы и т.п. В последней части этой книги подробно разобраны объектные модели приложений Microsoft Office: Word, Excel, Access, PowerPoint, Project, Outlook. Однако при программировании на языке VBA и создании своих собственных приложений ограничиваться только объектными моделей приложений Office совсем не обязательно.

В операционную систему Windows встроено множество других объектных моделей, применение которых может очень сильно расширить возможности ваших приложений. Ниже приведен список дополнительных объектных моделей, которые встроены в Windows или другие продукты Microsoft (об этом будет говориться отдельно), которыми я пользуюсь очень активно. Справку по большинству этих объектных моделей можно найти в MSDN.

Чтобы использовать возможности этих объектных моделей своей программе, необходимо добавить на нее ссылку в ваш проект. Делается это очень просто: в окне редактора Visual Basic выбираете Tools (Сервис) -> References (Ссылки) и выбираете нужную библиотеку.

Вот перечень наиболее интересных с точки зрения применения в своих приложениях объектных моделей:

· Windows Script Host Object Model (wshom.exe) — эта библиотека предназначена для автоматизации работы администраторов. Она обеспечивает возможности программной работы с сетью, принтерами, реестром, ярлыками, журналом событий, позволяет запускать внешние приложения и передавать в них нажатия клавиш и консольные строки и т.п. Есть на всех компьютерах с Windows 2000, XP, 2003 (в качестве необязательного компонента имеется и в Windows 98 Second Edition и Windows NT 4.0);

· Microsoft Scripting Runtime (scrrun.dll) — еще одна библиотека для администраторов. Главное ее богатство — очень удобный (и при этом простой) набор классов для работы с файловой системой — дисками, каталогами, файлами, содержимым текстовых файлов и т.п. Идет в одном наборе с Windows Script Host Object Model;

· Microsoft ADO (набор файлов, начинающийся на msado) — классы для работы с базами данных. Эта библиотека подробно рассмотрена в главе 8 этой книги. Также имеется на всех без исключения компьютерах под управлением Windows 2000, Windows XP и Windows 2003 Server (обычно сразу несколько версий);

· Microsoft SQLDMO Object Library (файл sqldmo.dll) — набор классов для получения полного контроля над Microsoft SQL Server (возможность производить любые административные операции, выполнять запросы и т.п.). Имеется только на компьютерах, на которых установлен SQL Server версий 7.0, 2000 или 2005. В SQL Server 2005 она разбита на несколько частей — SMO (SQL Server Management Objects), RMO (Replication Management Objects) и AMO (Analysis Management Objects);

· Microsoft CDO (версии 1.21, for NTS версии 1.2, for Windows 2000 версии 1.0) — файлы olemsg.dll, cdonts.dll, cdosys.dll) — наборы классов для работы с электронной почтой. Можно использовать для создания и отправки своих почтовых сообщений, просмотра новых сообщений в почтовом ящике и т.п. Есть на всех компьютерах под управлением Windows 2000, Windows XP и Windows 2003 Server. На компьютерах с более старыми операционными системами обычно также имеется, поскольку эта библиотека устанавливается вместе с Microsoft Office.

· Microsoft WMI Scripting v1.1 (wbemdisp.tlb) — расширение возможностей программ через программный интерфейс WMI (Windows Management Instrumentarium). Возможности — совершенно невероятные: от управления скоростью вращения вентилятора (и вообще возможности работы со всеми устройствами, про которые знает операционная система) до установки программного обеспечения, запуска процессов на удаленном компьютере, управления службами и т.п. В ней реализованы очень мощные возможности работы с событиями. Например, можно выполнять какой-либо код в ответ на запуск или завершение работы программы с определенным именем на удаленном компьютере, в ответ на запуск или удаление файла в каталоге, появления записи в журнале событий и т.п. Эта объектная модель (вместе со службой WMI) встроена во все компьютеры под управлением Windows 2000, Windows XP и Windows 2003 Server.

· Active Directory Scripting Interface, ADSI (adsldp.dll, wldap32.dll, adsnt.dll, adsnds.dll, adsnw.dll) — взаимодействие с объектами в каталогах Active Directory, NT, NetWare, то есть работа с учетными записями пользователей, группами, объектами компьютеров, принтеров и т.п. Также встроена в операционные системы Windows 2000, Windows XP и Windows 2003 Server (как в серверные, так и в пользовательские версии);

· объектная модель Windows Explorer. Информации по ней в справке не так много, но иногда она очень удобна для выполнения различных операций с файлами на диске;

· объектная модель Internet Explorer. Очень мощное и удобное средство для организации взаимодействия с пользователем. Позволяет показывать пользователю Web-страницы (последовательно их меняя, можно организовать "мультфильм"), флэш-ролики, демонстрировать видео и аудиоклипы и т.п. Очень удобна эта объектная модель и для сбора информации от пользователей при помощи скриптов и форм HTML, хотя в Microsoft Office для этой цели чаще всего используются обычные графические формы (о которых рассказывается в следующей главе).

Для тех, кто никогда не работал с этими объектными моделями, их применение может показаться темным лесом, но на практике все не так страшно. Они изначально создавались таким образом, чтобы с ними удобно было работать пользователям, не являющимися профессиональными программистами (например, администраторам). По опыту слушателей учебного курса "Программирование для администраторов", где эти рассматриваются эти объектные модели, освоить их можно очень быстро.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных