Читаем без скачивания VBA для чайников - Стив Каммингс
Шрифт:
Интервал:
Закладка:
Создание модулей классов
В VBA класс является шаблоном, по которому создаются подобные объекты. Класс определяет, какие свойства, методы и события должен иметь объект и как должен "вести" себя каждый из этих компонентов.
Чтобы создать класс, начните со вставки нового модуля класса в VBA-проект (для чего выберите Insert=Cl ass Module). Окно модуля класса выглядит и работает точно так же, как и обычное окно программного кода. Прежде чем двигаться дальше, задайте имя нового класса в строке (Name) в окне свойств.
Компоненты определения класса
Типичный класс имеет три главных компонента.
* Объявленные локальными переменные, предназначенные для использования внутри объекта.
* Открытые процедуры свойств, позволяющие процедурам из стандартных модулей прочитать или изменить текущие значения свойств.
* Открытые процедуры методов, задающие действия, выполняемые методами объекта.
Представленное ниже определение простого класса Thermostat включает все три этих компонента. Сам по себе пример не предназначен для выполнения каких-либо полезных задач, но он работает и есть на Web-странице на случай, если вы захотите его испытать. Если же вы предпочтете набрать программный код самостоятельно, с помощью окна свойств назовите модуль класса Thermostat, а затем введите в окне его программного кода следующее:
Private sngDegrees As Single ' переменная свойства
' Программный код процедуры свойства Let Temperature:
Public Property Let Temperature(ByVal snglnput As _
Single)
sngDegrees = snglnput
End Property
' Программный код процедуры свойства Get Temperature:
Public Property Get Temperature() As Single
temperature = sngDegrees
End Property
' Программный код процедуры метода CalculateEnergyUse:
Public Sub CalculateEnergyUse()
Const cstConversionFactor =2.45
Dim dblResult
dblResult = sngDegrees * 365 * cstConversionFactor
MsgBox "Годовой расход энергии на поддержание " & _
"установок термостата оценивается в " & _
dblResult & " Ватт."
End Sub
Объявление переменных класса
Для объявления переменных, которые понадобятся в нескольких свойствах или методах, используйте раздел Declarations в самом начале модуля класса. Всегда объявляйте эти переменные как локальные ( Private ), ведь объекты в основном предназначены для того, чтобы запретить программе получить прямой доступ к данным. Переменные, которые будут использоваться только в одном свойстве или методе, должны там и объявляться.
Для каждого из свойств объекта нужно объявить как минимум по одной переменной. Имя переменной не должно совпадать с именем свойства (чуть позже я объясню, как задать имя свойства).
Можно объявить и другие данные, которые объект будет использовать внутри себя и которые будут недоступными для других частей вашей программы.
Создание процедур свойств
Секрет наделения объекта свойством состоит в написании пары специальных процедур - процедур свойств Property Let и Property Get. Обе процедуры в паре должны иметь одинаковые имена.
Именем свойства будет то, которое вы выберете для процедур Property Let и Property Get. Ясно, что оно должно описывать содержимое или функцию свойства.
Да, и еще: если создаваемое свойство будет представлять ссылку на другой объект, вместо процедуры Property Let в вышеуказанной паре процедур используйте процедуру Property Set. В остальном такое свойство ничем не отличается от свойств, использующих другие типы данных.
Установка свойств объекта с помощью процедур Property Let
Процедура Property Let устанавливает значение свойства. В своей простейшей форме процедура Property Let берет переданное ей в виде аргумента значение и присваивает его переменной, представляющей свойство. В предыдущем примере это выглядело так:
Public Property Let Temperature(ByVal snglnput As Single)
sngDegrees = snglnput
End Property
Когда в основной части программы выполняется оператор, устанавливающий свойство, например
Ther most at.Temperature = 75
VBA вызывает процедуру Let Temperature со значением 75 для ее аргумента.
Ясно, что процедуры свойств не обязаны содержать лишь по одной строке программного кода. Можно добавить и другие операторы, например, проверяющие введенное значение на допустимость прежде, чем присвоить его свойству, или выполняющие какие-то иные действия.
Чтение свойств объекта с помощью процедур Property Get
Процедура Property Get подобна процедуре типа Function в том смысле, что она возвращает значение - конечно же, значение свойства, Как и в случае процедуры типа Function, значение, которое должно быть возвращено, присваивается имени процедуры, которое в данном случае оказывается именем свойства. Вот опять фрагмент предыдущего примера:
Public Property Get Temperaturef) As Single
Temperature = sngDegrees
End Property
Другие части вашей программы могут вызывать процедуру Get Temperature, чтобы присвоить возвращаемое этой процедурой значение переменной либо использовать это возвращаемое значение в условных операторах, как в следующем примере: sngCurrent Setting = Thermostat.Temperature
If Thermostat.Temperature > 80 Then
MsgBox "Рекомендуется снизить температуру!"
End If
Создание методов
Методы представляют собой обычные процедуры типов Sub и Function, которым выпало разместиться в модуле класса. Конечно, в большинстве случаев метод должен делать нечто, напрямую связанное с самим объектом, преобразуя данные, хранимые объектом. Но, при желании, в любой класс можно добавить и метод, рассчитывающий цены на прошлогодний снег.
VBA автоматически ассоциирует создаваемые вами методы с классами, в которые вы эти методы добавляете. Созданные вами методы можно вызывать из других частей программы точно так же, как и методы встроенных объектов.
Использование своих собственных объектов
Объекты, основанные на созданных вами классах, используются аналогично встроенным объектам VBA и объектам вашего приложения.
1. Объявите переменную для объекта, например:
Dim objCustomThermostat As Thermostat
2. Используйте оператор Set, чтобы создать реальный объект, с которым предполагается работать, например:
Set objCustomThermostat = New Thermostat
3. Получите доступ к свойствам объекта или вызовите его методы, используя при этом стандартный синтаксис VBA, например:
objCustomThermostat.Setting = 65
objCustomThermostat.CalculateEnergyUse
Использование элементов управления ActiveX
Вопреки сложившейся репутации программного империалиста, Microsoft стремится сделать свои средства разработки полностью "открытыми". Основываясь на спецификациях ActiveX, любой программист может создавать новые элементы управления, которые станут работать почти в любой программной среде, управляемой Windows, - включая C++, HTML, Visual Basic, а также VBA. Конечно, Microsoft определяет стандарты, которым должны соответствовать такие подключаемые программные единицы, так что от власти она ни в коей мере не отказывается.
В любом случае, в VBA можно добавить новые возможности, подключив дополнительные элементы управления ActiveX, не входящие в стандартный набор VBA. В одном проекте можно произвольно комбинировать элементы управления из разных источников. И все элементы управления ActiveX в основном работают так же, как и встроенные, которые, кстати, тоже являются элементами управления ActiveX.
В главе 21 приводится краткий обзор множества коммерческих и условно-бесплатных элементов управления ActiveX, которые помогут вам в работе. В настоящей главе обсуждаются общие приемы использования элементов управления ActiveX, а также даны некоторые советы об использовании элемента управления общим диалоговым окном (common dialog box control), предлагаемым Windows.
Некоторые элементы управления ActiveX правильно работают не в любой программной среде. Поэтому, прежде чем платить деньги за элемент управления, убедитесь, что он ведет себя в вашей версии VBA так, как обещает продавец. Вы должны также знать, что элементы управления ActiveX, созданные в Visual Basic, могут работать и ваших VBA-программах, но, вероятно, потребуют больших (около 2 Мбайт) файлов поддержки Visual Basic.
Добавление новых элементов в панель элементов управления
Чтобы получить возможность использовать элемент управления ActiveX, выполните следующее.
1. Установите программное обеспечение элемента управления на жесткий диск.
Мне кажется, это имеет смысл.
2. Зарегистрируйте элемент управления в Windows.
Зарегистрировать элемент управления можно несколькими способами, и, скорее всего, процедура установки сделает все за вас. Если же вам придется делать это самим, то работающему в VBA программисту проще всего использовать редактор Visual Basic.
3. Выберите элемент управления, чтобы активизировать его для использования в VBA.
Регистрация элемента управления
Чтобы зарегистрировать новый элемент управления, выясните имя файла, содержащего элемент управления, и место, где размещается этот файл на диске. После этого выполните следующее.
1. Выберите Tools=References, чтобы открыть диалоговое окно со списком ссылок на элементы управления ActiveX, доступные для вашего проекта.